将在 Matlab 中创建的 .mat 文件加载到 Python 中时,我遇到了一个奇怪的问题scipy.io.loadmat
。我发现在其他帖子中提到了类似的“数组结构”,但没有人解释它们。此外,我找到了解决这种奇怪问题的方法,但我想了解Python(或)为什么以scipy.io.loadmat
这种方式处理文件。
假设我在 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 创建一个单元素数组,而不是一个浮点数组(假设我删除了包含字符串的第一列)?
如果我的问题是基本的,我很抱歉,但我真的很想了解什么似乎是不必要的并发症。
正如评论中所说:
这种行为是因为您正在保存一个单元格,一个可以包含任何内容的“数组”。你用大小为 1x1(浮点数)的矩阵填充它。
这就是python给你的。一个nparray
的dtype=object
具有内部的1x1阵列。
Python 正在做的正是 MATLAB 正在做的。对于此示例,您应该避免在 MATLAB 中使用单元格。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句