den*_*nis 4 python arrays matlab numpy
我已经使用 scipy.io 导入了一个 Matlab *.mat 文件并尝试从中提取二维数据。里面有几个数组,当我试图获取它们时,我卡在了最后一个操作中。
数据如下图所示。当我尝试对其进行索引时:IndexError:数组索引太多
我用谷歌搜索到它看起来像一个单值元组,其中唯一的元素是我的数组。这原则上必须是可索引的,但它不起作用。的类型(数据)返回<类“numpy.ndarray” >
所以问题是:如何从这个数据结构中获取我的二维数组?
    data[0] # Doesn't work.
搜索loadmat应该会产生许多 SO 问题,这些问题将帮助您区分此结果。  loadmat必须将 MATLAB 对象转换为 Python/numpy 近似值。
data = io.loadmat(filename)
应该生成一个带有一些封面键和各种数据键的字典。  list(data.keys())来识别那些。
x = data['x']
应该匹配xMATLAB 工作区中的变量。它可以是一个二维的 F 阶数组,对应于一个 MATLAB 矩阵。
它可以是 (n,m) 对象 dtype 数组,对应于 MATLAB 单元格。
它可以是结构化数组,其中字段名称对应于 MATLABstruct属性。
在您的情况下,您似乎有一个 0d 对象 dtype 数组。形状是(),一个空元组(1d 具有 (n,) 形状,2d 具有 (n,m) 形状等)。您可以使用以下命令将元素从 () 数组中拉出:
 y[()]
 y.item()
这[()]看起来很奇怪,但它是合乎逻辑的。对于一维数组y[1]可以写成y[(1,)]. 对于2d,y[1,2]和y[(1,2)]都是一样的。索引元组应与维数相匹配。因此 a ()can index a () 形状数组。
经过一些巫术编码后,我找到了一个有趣的方法来解决这个问题:
初始数据是零维的,其中唯一的元素是二维数组。显然,取出这个元素的方法是:
    z = data.item()[()][0]
    print(z)         
最终结果如下我得到了我的二维数组: