3

当我使用 Python 对 3 维矩阵进行建模时,我首先制作了一个由零组成的多数组。然后,我可以通过引用它的索引轻松地覆盖每个元素。问题是,当尝试使用 [:] 引用多个元素时,索引的顺序会发生变化。我要用矩阵数学术语说话,所以请耐心等待。

在下面的示例中,我想为每个时间级别的二维平面中对象的位置建模。所以对于每个时间级别,我都有一个 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 矩阵。现在我想将第 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]。所以现在,对于每个时间级别,我希望第一行第二列(timelevel = 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]。

我的问题是:为什么?

4

1 回答 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.]]])
于 2012-04-16T00:35:46.530 回答