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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了存储在numpy void中的数组不返回形状/长度相关的知识,希望对你有一定的参考价值。

我有一个从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()返回一个大小的数组

答案

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 [()]`从对象层中提取该项。

以上是关于存储在numpy void中的数组不返回形状/长度的主要内容,如果未能解决你的问题,请参考以下文章

Numpy | 12 数组操作

NumPy的使用

Numpy 创建数组的常用函数

Numpy 简单教程(二)数组的形状(shape)操作

将两个不同形状的numpy数组合并到一个数组中

将numpy数组存储在mysql中