将MATLAB矩阵对象转换为python NumPy数组

时间:2017-01-17 19:18:59

标签: python matlab numpy matrix multidimensional-array

我想从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);

我想知道它是否存在更有效的解决方案。

2 个答案:

答案 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版本。我不知道这意味着什么,但我认为这可能会有所帮助