【问题标题】:Zero-dimensional numpy.ndarray : only element is a 2D array : how to access it?零维 numpy.ndarray :只有元素是二维数组:如何访问它?
【发布时间】:2018-12-11 11:45:19
【问题描述】:

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

数据如下图所示。当我尝试对其进行索引时:IndexError: too many indices for array

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

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

    data[0] # Doesn't work.

【问题讨论】:

  • array[0]?如果不告诉我们您尝试了什么,就很难说出您的问题可能出在哪里。
  • 您能否添加一个示例来生成类似的矩阵,或者至少您是如何尝试检索数据的?执行my_array.shape会输出什么?
  • 如果我知道如何生成类似的矩阵,我就会知道答案。不过我找到了解决方法,一些巫毒编码,我会尽快回复。

标签: python arrays matlab numpy


【解决方案1】:

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

data = io.loadmat(filename)

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

x = data['x']

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

可以是 (n,m) object 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)] 是相同的。索引元组应与维数匹配。因此,() 可以索引 () 形状数组。

【讨论】:

    【解决方案2】:

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

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

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

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

    【讨论】:

    • 你是在告诉自己你自己的答案行不通吗?
    猜你喜欢
    • 2011-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-09
    • 1970-01-01
    • 2021-10-30
    相关资源
    最近更新 更多