【问题标题】:IndexError: too many indices. Numpy Array with 1 row and 2 columnsIndexError:索引过多。具有 1 行和 2 列的 Numpy 数组
【发布时间】:2015-05-25 19:31:31
【问题描述】:

当我尝试只获取这样的数组的第一个元素时

import numpy

a = numpy.array([1,2])

a[:,0]

我收到此错误

---------------------------------------------------------------------------
 IndexError                                Traceback (most recent call last)
<ipython-input-3-ed371621c46c> in <module>()
----> 1 a[:,0]

IndexError: too many indices

我想在仍然使用切片的同时找到一种方法,因为完整的代码使用numpy.loadtxt() 打开并读取许多不同的文件,所有文件都有两列,从 1 到 N 不等。

【问题讨论】:

    标签: python arrays numpy


    【解决方案1】:

    你的数组a = numpy.array([1,2])只有一个维度:它的形状是(2,)。但是,您的切片 a[:,0] 指定了 两个 维度的选择。这会导致 NumPy 引发错误。

    要从a 获取第一个元素,您只需编写a[0](此处仅选择一个维度)。


    查看您的other question,如果您想确保语法a[:,0] 始终有效,您可以确保a 始终具有两个维度。当使用np.loadtxt 加载数组时,使用ndmin 参数,例如:

    np.loadtxt(F, skiprows=0, ndmin=2)
    

    【讨论】:

    • 感谢您的回复。问题是,在完整代码中,我有许多列长度不同的文件,因此仅获取第一个元素是行不通的。
    • @Surfcast23:我看到你已经用一些额外的细节编辑了你的问题,但我不太确定你在追求什么。如果您的数组只有一维(如您的示例中所示)a[i] 将选择索引i 处的值。对于具有二维(行和列)的数组,a[i,j]将从i 行中选择jth 列中的值。
    • 对不起,如果不清楚,我的问题实际上源于我在这个问题中提出的问题stackoverflow.com/questions/29191240/…
    • @Surfcast23 - 啊,好吧,我想我可能明白了 - 我已经用一个建议编辑了我的答案(让我知道它是否对你有用)。
    【解决方案2】:

    如上所述,您有一个一维数组,并且您正尝试将其分成二维。

    要添加的一点是,我在过去发现它非常有用,那就是 numpy 允许您轻松地将一维数组转换为二维数组(作为行或列):

    >>> a = np.array([0,1,2])
    >>> a.shape
    (3,)
    >>> a_row = a[None,:]
    >>> a_row.shape
    (1,3)
    >>> a_col = a[:,None]
    >>> a_col.shape
    (3,1)
    

    【讨论】:

      【解决方案3】:

      在解析许多可能有 1-1000 行的输入文件时,我也遇到过这个问题。但是,我使用的是 numpy genfromtxt,它不允许您设置 'ndmin',所以我想出的解决方案是手动将数组形状设置为 1,用于 1 行的数组:

      >>> arr=np.genfromtxt('file',names=['a','b'],dtype='f4,f4') 
      >>> if (np.size(arr) == 1): arr.shape=1
      

      1 行数组现在就像一个可以索引的一维数组:

      >>> for i in range(np.size(arr)): print arr['a'][i]
      

      【讨论】:

        猜你喜欢
        • 2018-05-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-09-10
        • 2020-03-04
        • 2020-09-26
        • 2019-07-17
        相关资源
        最近更新 更多