我想从MATLAB中调用一些python代码,为了做到这一点,我需要通过MATLAB函数ndarray
将矩阵对象转换为NumPy py.numpy.array
。但是,简单地将矩阵对象传递给函数不起作用。目前我解决了将矩阵转换为单元格对象的单元格的问题,其中包含矩阵的行。例如
function ndarray = convert(mat)
% This conversion fails
ndarray = py.numpy.array(mat)
% This conversion works
cstr = cell(1, size(mat, 1));
for row = 1:size(mat, 1)
cstr(row) = {mat(row, :)};
end
ndarray = py.numpy.array(cstr);
我想知道它是否存在更有效的解决方案。
答案 0 :(得分:1)
假设您的数组包含double
个值,错误会告诉我们应该做什么:
A = magic(3);
%% Attempt 1:
try
npA = py.numpy.array(A);
% Result:
% Error using py.numpy.array
% Conversion of MATLAB 'double' to Python is only supported for 1-N vectors.
catch
end
%% Attempt 2:
npA = py.numpy.array(A(:).');
% Result: OK!
然后:
>> whos npA
Name Size Bytes Class Attributes
npA 1x1 8 py.numpy.ndarray
之后,您可以使用numpy.reshape
直接在MATLAB或Python中恢复原始形状。
答案 1 :(得分:0)
实际上,使用python 2.7和Matlab R2018b,它只需执行以下操作即可:
pyvar = py.numpy.array(var);
Matlab告诉我,如果要将numpy数组转换为Matlab变量,我可以只使用double(pyvar)
顺便说一句,它不适用于python 3.7,也没有使用较旧的Matlab版本。我不知道这意味着什么,但我认为这可能会有所帮助