0

我对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)
4

1 回答 1

7

您对数组的索引不正确。在多个维度上建立索引的方法是array[x, y, z],不是array[x][y][z]。所以你想做c[200:, 200:, 200:]

当您在括号中使用单个索引时,它会索引到第一个维度。因此,当您这样做时c[200:][200:][200:],您每次都尝试沿第一个维度获取数组的前 200 个元素。但是那个维度的长度不到 600 个元素,所以当你这样做 3 次时,就没有什么可得到的了。

于 2012-10-19T19:47:35.377 回答