IndexError:索引太多了。 Numpy数组,包含1行和2列

时间:2015-03-22 20:40:20

标签: python arrays numpy

当我试图获得像这样的数组的第一个元素时

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不等。

3 个答案:

答案 0 :(得分:11)

您的数组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)

答案 1 :(得分:4)

如上所述,您有一维数组,并且您尝试使用两个维度对其进行切片。

要添加的一件事,我在过去发现它非常有用,就是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)

答案 2 :(得分:1)

在解析许多可以拥有1-1000行的输入文件时,我也遇到了这个问题。但是,我使用numpy genfromtxt,它不允许你设置'ndmin',所以我想出的解决方案是手动设置数组的形状等于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]