我对python比较陌生。我有一个有3个维度的numpy数组。我知道我们只能使用:
显示少数元素。
当我从较小的值开始做它似乎工作得很好,但在某一点上,它返回的东西不同于矩阵。
我想获得数组的平均值。因此,例如,给定数组c
,我会numpy.mean(c[0:200][0:200][0:200])
。这很好用。但是增加起点(即c[200:][200:][200:]
)不起作用并返回nan
。因此,打印结果解释了nan值。但我不明白为什么c[200:][200:][200:]
会回复这种答案。
以下是两个例子:
In [68]: c.shape
Out[68]: (448, 433, 446)
In [63]: c[100:][100:][100:]
Out[63]:
array([[[ 0., 0., 0., ..., 0., 0., 0.],
[ 0., 0., 0., ..., 0., 0., 0.],
[ 0., 0., 0., ..., 0., 0., 0.],
...,
[ 0., 0., 0., ..., 0., 0., 0.],
[ 0., 0., 0., ..., 0., 0., 0.],
[ 0., 0., 0., ..., 0., 0., 0.]],
[[ 0., 0., 0., ..., 0., 0., 0.],
[ 0., 0., 0., ..., 0., 0., 0.],
[ 0., 0., 0., ..., 0., 0., 0.],
...,
[ 0., 0., 0., ..., 0., 0., 0.],
[ 0., 0., 0., ..., 0., 0., 0.],
[ 0., 0., 0., ..., 0., 0., 0.]],
[[ 0., 0., 0., ..., 0., 0., 0.],
[ 0., 0., 0., ..., 0., 0., 0.],
[ 0., 0., 0., ..., 0., 0., 0.],
...,
[ 0., 0., 0., ..., 0., 0., 0.],
[ 0., 0., 0., ..., 0., 0., 0.],
[ 0., 0., 0., ..., 0., 0., 0.]],
...,
[[ 0., 0., 0., ..., 0., 0., 0.],
[ 0., 0., 0., ..., 0., 0., 0.],
[ 0., 0., 0., ..., 0., 0., 0.],
...,
[ 0., 0., 0., ..., 0., 0., 0.],
[ 0., 0., 0., ..., 0., 0., 0.],
[ 0., 0., 0., ..., 0., 0., 0.]],
[[ 0., 0., 0., ..., 0., 0., 0.],
[ 0., 0., 0., ..., 0., 0., 0.],
[ 0., 0., 0., ..., 0., 0., 0.],
...,
[ 0., 0., 0., ..., 0., 0., 0.],
[ 0., 0., 0., ..., 0., 0., 0.],
[ 0., 0., 0., ..., 0., 0., 0.]],
[[ 0., 0., 0., ..., 0., 0., 0.],
[ 0., 0., 0., ..., 0., 0., 0.],
[ 0., 0., 0., ..., 0., 0., 0.],
...,
[ 0., 0., 0., ..., 0., 0., 0.],
[ 0., 0., 0., ..., 0., 0., 0.],
[ 0., 0., 0., ..., 0., 0., 0.]]])
In [67]: c[200:][200:][200:]
Out[67]: array([], shape=(0, 433, 446), dtype=float64)
答案 0 :(得分:7)
您正在不正确地索引数组。对多个维度进行索引的方法是array[x, y, z]
,而不是array[x][y][z]
。所以你想做c[200:, 200:, 200:]
。
当您在括号中使用单个索引时,它会索引到第一个维度。因此,当您执行c[200:][200:][200:]
时,您会尝试每次沿第一个维度获取数组的前200个元素。但是这个维度的长度不到600个元素,所以当你这样做三次时,没有什么可以得到的。