我有一个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
这个错误的原因是什么?
答案 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