0

私はPythonに比較的慣れていません。3次元のnumpy配列があります。を使用して表示できる要素はごくわずか:です。

小さな値から始めて実行している間は問題なく動作しているように見えますが、ある時点では、行列とは異なるものが返されます。

配列の平均値を取得したい。したがって、たとえば、配列が与えられた場合c、私はそうしますnumpy.mean(c[0:200][0:200][0:200])。これは問題なく機能します。ただし、開始点(つまりc[200:][200:][200:])を増やすと機能せず、が返されますnan。したがって、結果を出力すると、nan値が説明されます。c[200:][200:][200:]しかし、なぜこのような答えが返ってくるのかわかりません。

次に2つの例を示します。

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 に答える