存储在numpy void中的数组不返回形状/长度

问题描述 投票:1回答:1

我有一个从matlab结构加载的大型numpy void数组。我可以访问存储在主数组中的数组,但访问它们的形状会返回'()'。访问它们的长度会返回错误:未确定对象的len()。有没有办法让我访问子阵列的形状?

arr = scipy.io.loadmat('mymatfile.mat', squeeze_me=True)
sub_arr = arr['a'][0]['b']['c']
print(sub_arr)
print(sub_arr.shape)
print(len(sub_arr))

返回:[[0 0 0 0] [0 0 0 0]]()

TypeError:未确定对象的len()

解决方案:sub_arr.item()返回一个大小的数组

python arrays numpy scipy void
1个回答
0
投票

0d数组的len产生此错误:

In [77]: x = np.array(123)
In [78]: x
Out[78]: array(123)
In [79]: x.shape
Out[79]: ()
In [80]: len(x)
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-80-a7f4a5366567> in <module>()
----> 1 len(x)

TypeError: len() of unsized object

loadmat使用对象dtype数组来表示MATLAB单元格和结构。

什么是dtypesub_arr?您可能需要使用sub_arr.item()orsub_arr [()]`从对象层中提取该项。

© www.soinside.com 2019 - 2024. All rights reserved.