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

den*_*nis 4 python arrays matlab numpy

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

数据如下图所示。当我尝试对其进行索引时:IndexError:数组索引太多

我用谷歌搜索到它看起来像一个单值元组,其中唯一的元素是我的数组。这原则上必须是可索引的,但它不起作用。的类型(数据)返回<类“numpy.ndarray” >

所以问题是:如何从这个数据结构中获取我的二维数组?

    data[0] # Doesn't work.
Run Code Online (Sandbox Code Playgroud)

有问题的数组

hpa*_*ulj 5

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

data = io.loadmat(filename)
Run Code Online (Sandbox Code Playgroud)

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

x = data['x']
Run Code Online (Sandbox Code Playgroud)

应该匹配xMATLAB 工作区中的变量。它可以是一个二维的 F 阶数组,对应于一个 MATLAB 矩阵。

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

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

在您的情况下,您似乎有一个 0d 对象 dtype 数组。形状是(),一个空元组(1d 具有 (n,) 形状,2d 具有 (n,m) 形状等)。您可以使用以下命令将元素从 () 数组中拉出:

 y[()]
 y.item()
Run Code Online (Sandbox Code Playgroud)

[()]看起来很奇怪,但它是合乎逻辑的。对于一维数组y[1]可以写成y[(1,)]. 对于2d,y[1,2]y[(1,2)]都是一样的。索引元组应与维数相匹配。因此 a ()can index a () 形状数组。


den*_*nis 1

经过一些巫术编码后,我找到了一个有趣的方法来解决这个问题:

初始数据是零维的,其中唯一的元素是二维数组。显然,取出这个元素的方法是:

    z = data.item()[()][0]
    print(z)         
Run Code Online (Sandbox Code Playgroud)

最终结果如下我得到了我的二维数组:

可用的二维数据