numpy - numpy数组列切片产生IndexError : invalid index Exception

标签 numpy

我正在使用numpy的1.5.1版本和Python 2.6.6。

我正在将一个二进制文件读入numpy数组:

>>> dt = np.dtype('<u4,<i2,<i2,<i2,<i2,<i2,<i2,<i2,<i2,u1,u1,u1,u1')
>>> file_data = np.fromfile(os.path.join(folder,f), dtype=dt)

这样很好。检查结果:
>>> type(file_data)
<type 'numpy.ndarray'>

>>> file_data
array([(3571121L, -54, 103, 1, 50, 48, 469, 588, -10, 0, 102, 0, 0),
   (3571122L, -78, 20, 25, 45, 44, 495, 397, -211, 0, 102, 0, 0),
   (3571123L, -69, -48, 23, 60, 19, 317, -26, -151, 0, 102, 0, 0), ...,
   (3691138L, -53, 52, -2, -11, 76, 988, 288, -101, 1, 102, 0, 0),
   (3691139L, -11, 21, -27, 25, 47, 986, 253, 176, 1, 102, 0, 0),
   (3691140L, -30, -19, -63, 59, 12, 729, 23, 302, 1, 102, 0, 0)],
  dtype=[('f0', '<u4'), ('f1', '<i2'), ('f2', '<i2'), ... , ('f12', '|u1')])

>>> file_data[0]
(3571121L, -54, 103, 1, 50, 48, 469, 588, -10, 0, 102, 0, 0)

>>> file_data[0][0]
3571121    

>>> len(file_data)
120020

当我尝试切片第一列时:
>>> file_data[:,0]

我得到:
IndexError: invalid index.

我看了一些简单的示例,并能够进行切片:
>>> a = np.array([(1,2,3),(4,5,6)])
>>> a[:,0]
array([1, 4])

我的案例和简单示例之间唯一的区别是我正在使用dtype。我做错了什么?

最佳答案

像这样设置dtype时,就是在创建Record Array。 Numpy将其视为dtype的一维元素数组。两者之间有根本的区别

file_data[0][0]


file_data[0,0] 

在第一个中,您要求一个一维数组的第一个元素,然后检索该返回元素的第一个元素。在第二个中,您要在2D数组的第一列的第一行中寻找元素。这就是为什么要获取IndexError的原因。

如果要使用2D表示法访问单个元素,则可以创建view并使用它。不幸的是,如果您要将对象视为2D数组,则AFAIK必须使所有元素都具有相同的dtype。

关于numpy - numpy数组列切片产生IndexError : invalid index Exception,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7093431/

相关文章:

python - 在 Django 中将 numpy 数组显示为图像

python - 动态改变 scipys ndimage 过滤器中的过滤器大小

python - 在 Pandas 中查找与数组匹配的列名

python - numpy 数组类型错误 : only integer scalar arrays can be converted to a scalar index

python - 决策边界逻辑回归不正确

python - 如何将图像的每一帧的二维数组写入csv?

python - np.piecewise() 与 math.pow() 一起使用?

python - 没有迭代器和/或循环的 Numpy 数组的组合/笛卡尔积

python - 数组中的行式元素搜索

python - cython numpy 累积函数