当我使用Python建立一个三维矩阵模型时,我首先创建一个全为零的多维数组。然后,我可以通过引用其索引轻松地覆盖每个元素。问题是,当尝试使用[:]引用多个元素时,索引的顺序会改变。下面我将使用矩阵数学术语进行说明,请耐心听我讲述。
在下面的示例中,我想要对二维平面上物体的位置进行建模,并记录每个时间级别的位置。所以对于每个时间级别,我都有一个X(行)和Y(列)坐标。在下面的示例中,我使用了两个时间级别,每个级别有3行4列。
因此,您可以看到,索引的顺序不再相同。它从Simple [TimeLevel,row,column] 切换到了Simple [column,TimeLevel,row]。
我的问题是:为什么?
在下面的示例中,我想要对二维平面上物体的位置进行建模,并记录每个时间级别的位置。所以对于每个时间级别,我都有一个X(行)和Y(列)坐标。在下面的示例中,我使用了两个时间级别,每个级别有3行4列。
>>> 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.]]]
看起来不错。我有两个3x4的矩阵。现在我想将第二个矩阵(第二个时间级别)的第三行第四列的值更改为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]。因此,现在对于每个时间水平,我希望第一行、第二列(时间水平=both,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]。
我的问题是:为什么?