【问题标题】:Python Array Indices Switch - What's Going On?Python 数组索引切换 - 发生了什么?
【发布时间】:2012-04-16 00:32:51
【问题描述】:

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

我的问题是:为什么?

【问题讨论】:

    标签: python arrays matrix


    【解决方案1】:

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

    >>> 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.]]])
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-28
      • 2013-09-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多