У меня есть такой скрипт на python:
import numpy as np
def my_function(x):
return np.array([x])
И у меня есть скрипт MATLAB для его вызова:
clear all;
clc;
if count(py.sys.path,'') == 0
insert(py.sys.path,int32(0),'');
end
myfunction_results = py.python_matlab_test.my_function(8);
display(myfunction_results);
И он отображает:
myfunction_results =
Python ndarray with properties:
T: [1×1 py.numpy.ndarray]
base: [1×1 py.NoneType]
ctypes: [1×1 py.numpy.core._internal._ctypes]
data: [1×8 py.buffer]
dtype: [1×1 py.numpy.dtype]
flags: [1×1 py.numpy.flagsobj]
flat: [1×1 py.numpy.flatiter]
imag: [1×1 py.numpy.ndarray]
itemsize: 8
nbytes: 8
ndim: 1
real: [1×1 py.numpy.ndarray]
shape: [1×1 py.tuple]
size: 1
strides: [1×1 py.tuple]
[8.]
Но я не знаю, как на самом деле получить данные из этого объекта.Тип py.numpy.ndarray
, но я хочу использовать его в MATLAB в качестве массива или матрицы, или целого числа, или чего-то еще.КАК преобразовать его в один из этих типов?
Я смотрел на них: https://www.mathworks.com/help/matlab/examples/call-python-from-matlab.html https://www.mathworks.com/matlabcentral/answers/216498-passing-numpy-ndarray-from-python-to-matlab https://www.mathworks.com/help/matlab/matlab_external/use-matlab-handle-objects-in-python.html
Некоторые ответыпредложить записать в файл .mat
.Я не хочу писать в файл.Это должно быть в состоянии запускаться в реальном времени, и запись в файл сделает его очень медленным по очевидным причинам.
Похоже, что здесь есть ответ: «Преобразование» массивов Numpy в Matlab и тискиВерсия , которая показывает
shape = cellfun(@int64,cell(myfunction_results.shape));
ls = py.array.array('d',myfunction_results.flatten('F').tolist());
p = double(ls);
Но я должен сказать, что это очень громоздко .... Есть ли более простой способ?