【问题标题】:Numpy to reorder such that every nth row from the current row is appended to itNumpy 重新排序,以便将当前行的每第 n 行附加到它
【发布时间】:2017-08-26 15:34:10
【问题描述】:

我想重塑 Numpy 数组 A,不是通过附加正常的下一行,而是通过附加它之后的每个第 N 行。

例如:

A = [[1  2  3  4]
[5  6  7  8]
[9  10 11 12]
[13 14 15 16]
[17 18 19 20]
[21 22 23 24]]

现在,我想从 A 构造一个像这样大小为 2x12 的数组

 A = [[1 2 3 4 9 10 11 12 17 18 19 10]
 [5 6 7 8 13 14 15 16 21 22 23 24]]

在这里您可以看到当前行的每第二行都附加到它并形成了新的重组数组。

【问题讨论】:

  • 或者:A.reshape(-1, 2, 4).swapaxes(0, 1).reshape(2, -1)

标签: python arrays numpy multidimensional-array numpy-ndarray


【解决方案1】:

您可以使用简单的索引,array.ravel()np.vstack()

In [37]: np.vstack((A[::2].ravel(), A[1::2].ravel()))
Out[37]: 
array([[ 1,  2,  3,  4,  9, 10, 11, 12, 17, 18, 19, 20],
       [ 5,  6,  7,  8, 13, 14, 15, 16, 21, 22, 23, 24]])

【讨论】:

  • 你能告诉我你在做什么吗?
  • @SurviMakharia 如果您了解numpy indexing,您就会知道索引符号的第一部分表示开始,第二部分表示停止,第三部分表示步骤。其中[1::2] 表示从索引 1 开始,步骤 2 关于您可以阅读文档的其他功能。
【解决方案2】:

这种方法怎么样?

# extract alternative rows starting from 0th row (1st row)
In [18]: A[0::2]
Out[18]: 
array([[ 1,  2,  3,  4],
       [ 9, 10, 11, 12],
       [17, 18, 19, 20]])

# and then flatten to 1D array
In [19]: A[0::2].flatten()
Out[19]: array([ 1,  2,  3,  4,  9, 10, 11, 12, 17, 18, 19, 20])


# extract alternative rows starting from 2nd row
In [17]: A[1::2]
Out[17]: 
array([[ 5,  6,  7,  8],
       [13, 14, 15, 16],
       [21, 22, 23, 24]])


# and then flatten to 1D array
In [20]: A[1::2].flatten()
Out[20]: array([ 5,  6,  7,  8, 13, 14, 15, 16, 21, 22, 23, 24])


# to get 2D, just put them in `np.vstack` (in the order you want the final array)
In [21]: np.vstack((A[0::2].flatten(), A[1::2].flatten()))
Out[21]: 
array([[ 1,  2,  3,  4,  9, 10, 11, 12, 17, 18, 19, 20],
       [ 5,  6,  7,  8, 13, 14, 15, 16, 21, 22, 23, 24]])

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-05-22
    • 2022-11-15
    • 2019-07-12
    • 1970-01-01
    • 2013-05-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多