python中的单元素阵列阵列:为什么



我在用 scipy.io.loadmat中加载matlab中创建的.mat-file时会遇到一个奇怪的性。我发现在其他帖子中提到了类似的"数组结构",但没有解释它们。另外,我找到了解决这种奇怪性的方法,但是我想了解为什么 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.ndarraydtype 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给您的。dtype=objectnparray具有1x1数组内部。

Python正在做Matlab所做的事情。对于此示例,您应该避免在MATLAB中使用单元格。

最新更新