访问3D numpy数组的切片

时间:2015-06-25 22:06:34

标签: python numpy 3d slice

我有一个3D numpy浮点数数组。我不正确地索引数组吗?我想访问切片124(索引123),但我看到了这个错误:

>>> arr.shape
(31, 285, 286)
>>> arr[:][123][:]
Runtime error 
Traceback (most recent call last):
  File "<string>", line 1, in <module>
IndexError: index 123 is out of bounds for axis 0 with size 31

这个错误的原因是什么?

5 个答案:

答案 0 :(得分:7)

arr[:][123][:]是逐件处理的,而不是整体处理。

arr[:]  # just a copy of `arr`; it is still 3d
arr[123]  # select the 123 item along the first dimension
# oops, 1st dim is only 31, hence the error.

arr[:, 123, :]作为整个表达式处理。沿中轴选择一个“项目”,然后沿其他两个返回所有内容。

arr[12][123]会起作用,因为它首先从第一轴中选择一个2d数组。现在[123]适用于285长度维度,返回1d数组。重复索引[][]..的工作经常足以混淆新的程序员,但通常它不是正确的表达式。

答案 1 :(得分:4)

我想你可能只想做arr[:,123,:]。这将为您提供一个形状为(31,286)的二维数组,其中第124个位置的内容沿着该轴。

答案 2 :(得分:0)

这是你想要的吗?

arr.flatten()[123]

答案 3 :(得分:0)

查看xD数组的一些切片示例。你可以试试这个:

a[:,123,:]

答案 4 :(得分:0)

import numpy as np

s=np.ones((31,285,286)) # 3D array of size 3x3 with "one" values
s[:,123,:] # access index 123 as you want