colon operator in compiled python package
    8 views (last 30 days)
  
       Show older comments
    
Hi, I compiled one python package from a matlab one using library compiler. Everything went well until I did a test in Python’s Interpreter. In my Matlab code, I have a function called returnS_test_compiler with a line 
f = (fRange(1):fRange(2):fRange(3))';
 which generates a list and then "transpose" it.
I assume by compiling the code into python package, I do not need to modify anything in the code. So when I call this returnS_test_compiler in python imported as a python package, it gives the following error: 
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/MATLAB/MATLAB_Runtime/v97/toolbox/compiler_sdk/pysdk_py/matlab_pysdk/runtime/deployablefunc.py", line 80, in __call__
    nlhsWasSpecified, stdoutObj, stderrObj).result()
  File "/usr/local/MATLAB/MATLAB_Runtime/v97/toolbox/compiler_sdk/pysdk_py/matlab_pysdk/runtime/futureresult.py", line 135, in result
    raise e
  File "/usr/local/MATLAB/MATLAB_Runtime/v97/toolbox/compiler_sdk/pysdk_py/matlab_pysdk/runtime/futureresult.py", line 123, in result
    raise e
  File "/usr/local/MATLAB/MATLAB_Runtime/v97/toolbox/compiler_sdk/pysdk_py/matlab_pysdk/runtime/futureresult.py", line 113, in result
    self._nlhs, out=self._out, err=self._err)
matlab_pysdk.runtime.MatlabRuntimeError: An error occurred when evaluating the result from a function. Details: 
  File /root/.mcrCache9.7/return0/returnS_test/returnS_test_compiler.m, line 15, in returnS_test_compiler
Undefined function 'colon' for input arguments of type 'cell'.
 It seems that it is complaining ( : : ) is not recognisable as a python sentence. Any suggestions?
0 Comments
Answers (3)
  Steven Lord
    
      
 on 9 Nov 2020
        The variable fRange is a cell array. The colon operator doesn't know how to work on cell arrays.
a = {1};
b = {10};
x = a:b % throws error
To get this to work, pass the contents of the cells in the cell arrays to the colon operator.
a = {1};
b = {10};
x = a{1}:b{1} % does not throw an error.
0 Comments
  Sean de Wolski
      
      
 on 9 Nov 2020
        You should call the MATLAB module with a numeric input rather than a list.  This is the data type conversion table.  Use numeric types (probably matlab.double)
https://www.mathworks.com/help/releases/R2020b/matlab/matlab_external/pass-data-to-matlab-from-python.html
1 Comment
  Sean de Wolski
      
      
 on 12 Nov 2020
				This page is even more clear in exactly what you need to do:
https://www.mathworks.com/help/releases/R2020b/matlab/matlab_external/matlab-arrays-as-python-variables.html
  Jieqiang Wei
 on 10 Nov 2020
        1 Comment
  Sean de Wolski
      
      
 on 12 Nov 2020
				You seem to be finding the engine so that doesn't seem like the issue.  You just need to cast the python data to a matlab double.  The doc page I linked shows how to do this.
See Also
Categories
				Find more on Call Python from MATLAB in Help Center and File Exchange
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!