簡體   English   中英

將 MATLAB 矩陣對象轉換為 python NumPy 數組

[英]Convert a MATLAB matrix object to a python NumPy array

我想打電話從MATLAB一些Python代碼,為了做到這一點,我需要一個矩陣對象轉換為NumPy的ndarray ,通過MATLAB功能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);

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

假設您的數組包含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   

之后,您可以直接在 MATLAB 或 Python 中使用numpy.reshape來獲取原始形狀。

實際上,使用 python 2.7 和 Matlab R2018b,它只需執行以下操作:

pyvar = py.numpy.array(var);

Matlab 告訴我,如果我想將 numpy 數組轉換為 Matlab 變量,我可以只使用 double(pyvar)

順便說一句,它不適用於 python 3.7,也不適用於舊版本的 Matlab 。 我不知道這是什么意思,但我認為這可能會有所幫助

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM