質問

3つの座標(x、y、z)を持つMATRIXというnumpy行列変数があるとします。

次のコードを使用してマトリックスの値にアクセスしています

myVar = MATRIX[0,0,0]

等しい

myVar = MATRIX[0,0][0]

または

myVar = MATRIX[0][0,0]

次のコードがある場合はどうですか?

myTuple = (0,0)
myScalar = 0
myVar = MATRIX[myTuple, myScalar]

実行することと同等の最後の行です

myVar = MATRIX[myTuple[0], myTuple[1], myScalar]

簡単なテストを実行しましたが、そのように見えますが、すべてのケースでそうではないかもしれません。 numpy行列を使用してPythonで角括弧はどのように機能しますか?初日から、私はそれらがどのように機能するか混乱しました。

ありがとう

役に立ちましたか?

解決

matrix ではなく array インスタンスがあると仮定します。後者は2つの次元しか持つことができないためです。

m [0、0、0] は、位置(0、0、0)の要素を取得します。 m [0、0] は、それ自体が array であるサブアレイ全体(スライス)を取得します。このサブ配列の最初の要素は m [0、0] [0] のように取得できます。これが、両方の構文が機能する理由です( m [i、j、k] は、不要な中間ステップがないため推奨されます。

このipythonセッションを見てください:

rbonvall@andy:~$ ipython
Python 2.5.4 (r254:67916, Sep 26 2009, 08:19:36) 
[...]

In [1]: import numpy.random

In [2]: m = numpy.random.random(size=(3, 3, 3))

In [3]: m
Out[3]: 
array([[[ 0.68853531,  0.8815277 ,  0.53613676],
        [ 0.9985735 ,  0.56409085,  0.03887982],
        [ 0.12083102,  0.0301229 ,  0.51331851]],

       [[ 0.73868543,  0.24904349,  0.24035031],
        [ 0.15458694,  0.35570177,  0.22097202],
        [ 0.81639051,  0.55742805,  0.5866573 ]],

       [[ 0.90302482,  0.29878548,  0.90705737],
        [ 0.68582033,  0.1988247 ,  0.9308886 ],
        [ 0.88956484,  0.25112987,  0.69732309]]])

In [4]: m[0, 0]
Out[4]: array([ 0.68853531,  0.8815277 ,  0.53613676])

In [5]: m[0, 0][0]
Out[5]: 0.6885353066709865

これは、numpy array に対してのみこのように機能します。 Pythonの組み込みタプルとリストは、整数だけではなく、タプルによるインデックス付けができません。

他のヒント

別のタプルでタプルをインデックス化することはできないため、そのコードはいずれも有効ではありません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top