如何解决numpy数组-使用reshape
我想将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],22],32],42],[13,14],[23,24],[33,34],[43,44],[15,[25,[35,[45,46]])
,如果n=3
:
array([[11,13],23],33],43],[14,[24,25. 26],[34,[44,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,axis=0)
我不知道是否可以通过整形来完成。
解决方法
OP提供了一种解决方案:
np.concatenate(np.split(table,table.shape[1]/n,axis=1),axis=0)
它似乎效率不高,因为np.split
强制将数据更改为数组列表,然后在外部参数中对其进行迭代。不仅np.concatenate
还不够高效。当列表项的长度不平衡时,它们是理想的工作方式。
我的解决方案如下:
np.vstack(table.reshape(4,3,2).swapaxes(0,1))
#np.vstack(table.reshape(4,2,3).swapaxes(0,1)) #for second case
让我们检查一下我对表现的预测是否正确:
%timeit np.vstack(table.reshape(4,1))
%timeit np.concatenate(np.split(table,table.shape[1]/2,axis=0)
输出:
22.4 µs ± 2.72 µs per loop (mean ± std. dev. of 7 runs,100000 loops each)
42.8 µs ± 9.09 µs per loop (mean ± std. dev. of 7 runs,10000 loops each)
我一直在numpyviz
的帮助下寻求解决方案(免责声明:我是它的作者)。 numpyviz
的个性化有助于更好地理解流程:
通常,您需要设置形状以使块保留宽度和高度。 Numpyviz
归一化暗示新形状的axis=0
和axis=2
分别对应于table.shape[0]
和n
。同样,中轴的长度是table.shape[1]\\n
的多个块。因此,您可以像这样传递参数:
table.reshape(table.shape[0],table.shape[1]\\n,n)
或什至以更简单的方式:
table.reshape(table.shape[0],-1,n)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。