Python数组索引交换 - 发生了什么?

3
当我使用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.]]]

目前为止一切顺利。从这里,我可以得知索引的顺序是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]。
我的问题是:为什么?
1个回答

2
[:] 只是返回序列的一个副本,这并不是你想要的。
>>> 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.]]])

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接