微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

numpy数组-使用reshape

如何解决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的个性化有助于更好地理解流程:

enter image description here

通常,您需要设置形状以使块保留宽度和高度。 Numpyviz归一化暗示新形状的axis=0axis=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 举报,一经查实,本站将立刻删除。