[英]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.