colon operator in compiled python package
조회 수: 1 (최근 30일)
이전 댓글 표시
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
답변 (3개)
Steven Lord
2020년 11월 9일
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
Sean de Wolski
2020년 11월 9일
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
Sean de Wolski
2020년 11월 12일
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
2020년 11월 10일
댓글 수: 1
Sean de Wolski
2020년 11월 12일
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.
참고 항목
카테고리
Help Center 및 File Exchange에서 Call Python from MATLAB에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!