当我试图获得像这样的数组的第一个元素时
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不等。
答案 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]