繁体   English   中英

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

[英]IndexError: too many indices. Numpy Array with 1 row and 2 columns

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

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

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

从获得的第一个元素a ,你只需要编写a[0]一个只有一个层面正在这里做选择)。


看着你的其他问题 ,如果你想确保语法a[:,0]总是工作,你可以确保a总是有两个方面。 使用np.loadtxt加载数组时, np.loadtxt使用ndmin参数,例如:

np.loadtxt(F, skiprows=0, ndmin=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)

解析许多可能有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行数组现在就像一个可以索引的1-D数组:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM