我在加載一個在Matlab中創建的.mat文件到Python中時遇到了一個奇怪的事情,與scipy.io.loadmat
。我發現在其他帖子中提到了類似的「陣列結構」,但沒有解釋它們。此外,我找到了解決這個問題的方法,但我想了解爲什麼 Python(或scipy.io.loadmat
)以這種方式處理文件。Python中單元素數組的數組:爲什麼?
比方說,我創建在Matlab細胞,並將其保存:
my_data = cell(dim1, dim2);
% Fill my_data with strings and floats...
save('my_data.mat','my_data')
現在我把它加載到的Python:
import scipy.io as sio
data = sio.loadmat('my_data.mat')['my_data']
現在data
的類型爲numpy.ndarray
和dtype
object
。當我看到一個切片,它可能是這個樣子:
data[0]
>>> array([array(['Some descriptive string'], dtype='<U13'),
array([[3.141592]]), array([[2.71828]]), array([[4.66920]]), etc.
], dtype=object).
爲什麼會出現這種情況?爲什麼Python/sio.loadmat創建一個單元素數組的數組,而不是一個浮點數組(假設我刪除了包含字符串的第一列)?
對不起,如果我的問題是基本的,但我真的想了解什麼似乎是不必要的複雜。
如何在Matlab中填寫my_data? – Szabolcs
在MATLAB中,不存在不是數組的變量。單值變量是1x1矩陣。單元是一個數組,可以包含任何在MATLAB中。我假設這種行爲來自具有數值的單元格並在python中加載。你在MATLAB中需要一個單元嗎?如果將它保存爲矩陣,您將避免此行爲。 –
我第二@AnderBiguri。 Matlab中的單元格可以將任何*作爲元素。同樣,'dtype = object'數組可以將任何*作爲元素。 'loadmat'根本不夠聰明,無法確定在特定情況下所有* any都是浮點數。最好儘量不要使用單元格和對象數組。 – kazemakase