我想重塑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]]
在这里,你可以看到当前行的每隔一行都被追加到它的后面,并形成了新的整形数组。
发布于 2017-04-01 11:58:33
您可以使用简单的索引、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]])
发布于 2017-04-01 12:30:09
这种方法怎么样?
# 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]])
https://stackoverflow.com/questions/43156322
复制