2012-10-19 117 views
0

我對Python比較新。我有一個有3個維度的numpy數組。我知道我們只能使用:顯示幾個元素。Python的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) 

回答

7

你索引到陣列不當。多維索引的方法是array[x, y, z],而不是array[x][y][z]。所以你想要做c[200:, 200:, 200:]

當您在括號中使用單個索引時,它將索引到第一個維度。所以當你做c[200:][200:][200:]時,你試着每次都得到第一個維度的數組中的前200個元素。但是這個維度長度不到600個元素,所以當你做了三次時,沒有什麼可以獲得的。

+0

好的!謝謝!來自其他語言的舊習慣! – macrocosme