我有一个像这样的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
文件。我不想写入文件。这需要能够实时运行,并且出于明显的原因,写入文件将使其非常慢。
似乎这里有一个答案:"Converting" Numpy arrays to Matlab and vice versa显示
shape = cellfun(@int64,cell(myfunction_results.shape));
ls = py.array.array('d',myfunction_results.flatten('F').tolist());
p = double(ls);
但是我必须说这很麻烦。...有没有更简单的方法?
答案 0 :(得分:0)
当前没有简单的方法可以将NumPy ndarray转换为Matlab数组,但是以下Matlab函数可以执行转换:
function A = np2mat(X, tp)
% Convert NumPy ndarray to a Matlab array
if nargin < 2
tp = 'd';
end
sz = int32(py.array.array('i', X.shape));
if strcmp(tp, 'd')
A = reshape(double(py.array.array(tp,X.flatten('F'))), sz);
elseif strcmp(tp, 'i')
A = reshape(int32(py.array.array(tp,X.flatten('F'))), sz);
else
error('Unknown data type')
end
默认数据类型为double,请指定参数tp='i'
以转换整数数组。