Pythonを使用して3次元行列をモデル化するときは、最初にゼロのマルチ配列を作成します。次に、インデックスを参照することで、各要素を簡単に上書きできます。問題は、[:]を使用して複数の要素を参照しようとすると、インデックスの順序が変わることです。行列数学の専門用語で話すので、我慢してください。
以下の例では、時間レベルごとに2D平面内のオブジェクトの位置をモデル化したいと思います。したがって、時間レベルごとに、X(行)とY(列)の座標があります。以下の例では、3行4列の2つの時間レベルを使用しています。
>>> Simple = numpy.zeros([2,3,4],float)
>>> print Simple
[[[ 0. 0. 0. 0.]
[ 0. 0. 0. 0.]
[ 0. 0. 0. 0.]]
[[ 0. 0. 0. 0.]
[ 0. 0. 0. 0.]
[ 0. 0. 0. 0.]]]
いいね。2つの3x4行列があります。次に、2番目の行列(2番目の時間レベル)、3番目の行、4番目の列の値を9に変更します。
>>> Simple[1][2][3] = 9
>>> print Simple
[[[ 0. 0. 0. 0.]
[ 0. 0. 0. 0.]
[ 0. 0. 0. 0.]]
[[ 0. 0. 0. 0.]
[ 0. 0. 0. 0.]
[ 0. 0. 0. 9.]]]
ここまでは順調ですね。このことから、インデックスの順序はSimple [TimeLevel、X、Y]であることがわかります。したがって、ここで、各時間レベルについて、最初の行、2番目の列(時間レベル=両方、x = 0、y = 1)の要素を数値「4」にします。
>>> Simple[:][0][1] = 4
>>> print Simple
[[[ 0. 0. 0. 0.]
[ 4. 4. 4. 4.]
[ 0. 0. 0. 0.]]
[[ 0. 0. 0. 0.]
[ 0. 0. 0. 0.]
[ 0. 0. 0. 9.]]]
ご覧のとおり、インデックスの順序は同じではなくなりました。Simple [TimeLevel、row、column]からSimple [column、TimeLevel、row]に切り替えました。
私の質問は:なぜですか?