【问题标题】:Reordering rows of a 3D array重新排序 3D 数组的行
【发布时间】:2014-12-21 12:50:09
【问题描述】:

我有一个像这样的 3D 数组:

[[[ 0  0  1  0 -1  1  1  0  0]
  [ 0  0 -1  0  1 -1 -1  0  0]
  [ 0  0  1 -2 -1  1  0  0  0]
  [ 0  0 -1  2  1 -1  0  0  0]]

 [[ 0  0  0  2  0  0  1  0  0]
  [ 0  0  0  0  0  0  0  0  0]
  [ 0  0  0 -2  0  0 -1  0  0]
  [ 0  0  0  0  0  0  0  0  0]]

 [[ 0  0  1  0 -1  1  1  0  0]
  [ 0  0 -1  2  1 -1  0  0  0]
  [ 0  0  1 -2 -1  1  0  0  0]
  [ 0  0 -1  0  1 -1 -1  0  0]]

 [[ 0  0  0  0  0  0  0  0  0]
  [ 0  0  0  0  0  0  0  0  0]
  [ 0  0  0  0  0  0  0  0  0]
  [ 0  0  0  0  0  0  0  0  0]]]

我需要对其进行整形,以便每个矩阵中的所有第一行都在一个矩阵中组合在一起,然后是所有第二行,等等。

所以结果看起来像:

[[[ 0  0  1  0 -1  1  1  0  0]
  [ 0  0  0  2  0  0  1  0  0]
  [ 0  0  1  0 -1  1  1  0  0]
  [ 0  0  0  0  0  0  0  0  0]]

 [[ 0  0 -1  0  1 -1 -1  0  0]
  [ 0  0  0  0  0  0  0  0  0]
  [ 0  0 -1  2  1 -1  0  0  0]
  [ 0  0  0  0  0  0  0  0  0]]

 [[ 0  0  1 -2 -1  1  0  0  0]
  [ 0  0  0 -2  0  0 -1  0  0]
  [ 0  0  1 -2 -1  1  0  0  0]
  [ 0  0  0  0  0  0  0  0  0]]

 [[ 0  0 -1  2  1 -1  0  0  0]
  [ 0  0  0  0  0  0  0  0  0]
  [ 0  0 -1  0  1 -1 -1  0  0]
  [ 0  0  0  0  0  0  0  0  0]]]

【问题讨论】:

  • 为什么不举一个更简洁的例子呢?给出这么大的矩阵,真的有必要了解你的问题吗?

标签: python arrays numpy reshape


【解决方案1】:

您只需要swap the first two axes 数组x。如果数组是ndarray(和你的一样),则返回一个视图并且不复制任何数据:

>>> x.swapaxes(0,1)

例如:

>>> x = np.arange(27).reshape(3,3,3)
>>> x
array([[[ 0,  1,  2],
        [ 3,  4,  5],
        [ 6,  7,  8]],

       [[ 9, 10, 11],
        [12, 13, 14],
        [15, 16, 17]],

       [[18, 19, 20],
        [21, 22, 23],
        [24, 25, 26]]])

>>> x.swapaxes(0,1)
array([[[ 0,  1,  2],
        [ 9, 10, 11],
        [18, 19, 20]],

       [[ 3,  4,  5],
        [12, 13, 14],
        [21, 22, 23]],

       [[ 6,  7,  8],
        [15, 16, 17],
        [24, 25, 26]]])

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-09-23
    • 2011-01-27
    • 2012-08-11
    • 2016-08-14
    • 1970-01-01
    • 2015-02-13
    相关资源
    最近更新 更多