零维numpy.ndarray:唯一的元素是2D数组:如何访问它?

时间:2018-07-03 08:24:19

标签: python arrays matlab numpy

我已经使用scipy.io导入了Matlab * .mat文件,并尝试从中提取2D数据。里面有几个数组,当我尝试获取它们时,我陷入了最后的操作。

数据如下图所示。当我尝试建立索引时: IndexError:数组的索引过多

我已经搜索到它看起来像一个单值元组,其中唯一的元素是我的数组。原则上,这必须是可索引的,但不起作用。 type(data)返回<< em> class'numpy.ndarray'>

问题是:如何从这种数据结构中提取2D阵列?

    data[0] # Doesn't work.

array in question

2 个答案:

答案 0 :(得分:2)

loadmat上进行搜索应该会产生许多SO问题,这些问题将有助于您分清结果。 loadmat必须将MATLAB对象转换为Python / numpy近似值。

data = io.loadmat(filename)

应生成带有一些封面键和各种数据键的字典。 list(data.keys())来识别那些人。

x = data['x']

应与MATLAB工作区中的x变量匹配。可以是二维的F数组,对应于MATLAB矩阵。

可能是(n,m)个对象dtype数组,对应于MATLAB单元格。

它可以是结构化的数组,其中字段名称对应于MATLAB struct属性。

在您的情况下,看起来您有一个0d对象dtype数组。形状为(),一个空的元组(1d具有(n,)形状,2d具有(n,m)形状,等等)。您可以使用以下方法将元素从()数组中拉出:

 y[()]
 y.item()

[()]看起来很奇怪,但这是合乎逻辑的。对于一维数组,y[1]可以写为y[(1,)]。对于2d,y[1,2]y[(1,2)]是相同的。标引元组应与维数匹配。因此()可以索引一个()形状数组。

答案 1 :(得分:-1)

经过伏都教编码后,我找到了解决此问题的有趣方法:

初始数据是零维,其中唯一的元素是2D数组。清除该元素的方法显然是:

    z = data.item()[()][0]
    print(z)         

最终结果如下所示,我得到了2D数组:

Workable 2D data