Python数组索引开关-What';发生什么事了?

Python数组索引开关-What';发生什么事了?,python,arrays,matrix,Python,Arrays,Matrix,当我使用Python对三维矩阵建模时,我首先创建一个多个零数组。然后,我可以通过引用每个元素的索引轻松地覆盖每个元素。问题是,当尝试使用[:]引用多个元素时,索引的顺序会改变。我要用矩阵数学的行话说话,所以请耐心听我说 在下面的示例中,我希望为每个时间级别的对象在二维平面中的位置建模。因此,对于每个时间级别,我都有一个X(行)和Y(列)坐标。在下面的示例中,我使用了两个具有3行和4列的时间级别 >>> Simple = numpy.zeros([2,3,4],float

当我使用Python对三维矩阵建模时,我首先创建一个多个零数组。然后,我可以通过引用每个元素的索引轻松地覆盖每个元素。问题是,当尝试使用[:]引用多个元素时,索引的顺序会改变。我要用矩阵数学的行话说话,所以请耐心听我说

在下面的示例中,我希望为每个时间级别的对象在二维平面中的位置建模。因此,对于每个时间级别,我都有一个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.]]]
到目前为止还不错。从这里,我可以看出索引的顺序很简单[TimeLevel,X,Y]。现在,对于每个时间级别,我希望第一行第二列中的元素(timelevel=both,x=0,y=1)是数字“4”

如你所见,索引的顺序不再相同。它从简单的[TimeLevel,row,column]切换到简单的[column,TimeLevel,row]


我的问题是:为什么?

所有的
[:]
都是返回序列的副本。这不是你想要的

>>> Simple[:,0,1] = 4
>>> Simple
array([[[ 0.,  4.,  0.,  0.],
        [ 0.,  0.,  0.,  0.],
        [ 0.,  0.,  0.,  0.]],

       [[ 0.,  4.,  0.,  0.],
        [ 0.,  0.,  0.,  0.],
        [ 0.,  0.,  0.,  0.]]])
>>> Simple[:,0,1] = 4
>>> Simple
array([[[ 0.,  4.,  0.,  0.],
        [ 0.,  0.,  0.,  0.],
        [ 0.,  0.,  0.,  0.]],

       [[ 0.,  4.,  0.,  0.],
        [ 0.,  0.,  0.,  0.],
        [ 0.,  0.,  0.,  0.]]])