【发布时间】:2021-02-03 06:23:48
【问题描述】:
我想将n 的列数堆叠为数组末尾的新行。我试图通过重塑来做到这一点,但我做不到。例如给定表格
table = np.array([[11,12,13,14,15,16],
[21,22,23,24,25,26],
[31,32,33,34,35,36],
[41,42,43,44,45,46]])
如果n=2 应该是我的输出:
array([[11, 12],
[21, 22],
[31, 32],
[41, 42],
[13, 14],
[23, 24],
[33, 34],
[43, 44],
[15, 16],
[25, 26],
[35, 36],
[45, 46]])
如果n=3:
array([[11, 12, 13],
[21, 22, 23],
[31, 32, 33],
[41, 42, 43],
[14, 15, 16],
[24, 25. 26],
[34, 35, 36],
[44, 45, 46]])
更新:
好的,我设法通过以下命令实现了我想要的结果:
import numpy as np
n=2
np.concatenate(np.split(table, table.shape[1]/n, axis=1), axis=0)
n=3
np.concatenate(np.split(table, table.shape[1]/n, axis=1), axis=0)
我不知道是否可以通过重塑来完成。
【问题讨论】:
-
判断
arr1是否可以重整为arr2的最佳方法是检查arr1.flatten()是否等于arr2.flatten()。显然不是你的情况。因此,如果您希望使用单个reshape(...)方法,则需要另外使用其他方法(在某些情况下可能会重复使用reshape(..)) -
好吧,一开始我试图弄清楚我是否可以使用该线程stackoverflow.com/questions/55444777/… 中的解决方案,他们也使用
flatten(),但显然正如您提到的那样,这很可能是不可能的。 -
好吧,至少你可以应用一些额外的方法,例如
np.transpose,np.squeeze,np.swapaxis。您还将检查maxpooling的一个很好的示例,它与您的问题非常接近。我会尽量适应你的问题。 -
你可以使用 np.row_stack 代替连接:np.row_stack(np.split(table, table.shape[1]/n, axis=1))。不可否认,这样做的唯一好处是无需指定轴。这只是另一种潜在的使用途径。就个人而言,我认为没有必要在这里使用 reshape,你所拥有的就很好。
-
是的,很可能你是对的。关键是我已将其与
reshape相关联,因为这是我想到的第一个使用命令,但正如你所说,我所拥有的可能已经足够好了。