[英]Reshaping numpy array and converting columns to rows
我很抱歉标题含糊不清。 我有以下似乎无法解决的任务。 我有一个形状数组(4,2,k)
。 我想在将列转换为行时将其重塑为形状(2,k*4)
。
这是一个示例输入数组,其中 k=5:
sample_array = array([[[2., 2., 2., 2., 2.],
[1., 1., 1., 1., 1.]],
[[2., 2., 2., 2., 2.],
[1., 1., 1., 1., 1.]],
[[2., 2., 2., 2., 2.],
[1., 1., 1., 1., 1.]],
[[2., 2., 2., 2., 2.],
[1., 1., 1., 1., 1.]]])
我已经设法通过for-loop
获得所需的 output
twos=np.array([])
ones=np.array([])
for i in range(len(sample_array)):
twos = np.concatenate([twos, sample_array[i][0]])
ones = np.concatenate([ones, sample_array[i][1]])
desired_array = np.array([twos, ones])
desired array
如下所示:
array([[2., 2., 2., 2., 2., 2., 2., 2., 2., 2., 2., 2., 2., 2., 2., 2.,
2., 2., 2., 2.],
[1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.,
1., 1., 1., 1.]])
我的任务有更优雅的解决方案吗? 我尝试过.reshape()、.transpose()、.ravel(),但似乎从来没有得到想要的结果。
如果这是重复的,我很抱歉,我查看了几十个 StackOverflow Q,但没有找到解决方案。
您可以swapaxes
和reshape
:
sample_array.swapaxes(0, 1).reshape(sample_array.shape[1], -1)
output:
array([[2., 2., 2., 2., 2., 2., 2., 2., 2., 2., 2., 2., 2., 2., 2., 2.,
2., 2., 2., 2.],
[1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.,
1., 1., 1., 1.]])
我认为简单的水平堆栈hstack
应该可以正常工作:
>>> np.hstack(sample_array)
array([[2., 2., 2., 2., 2., 2., 2., 2., 2., 2., 2., 2., 2., 2., 2., 2.,
2., 2., 2., 2.],
[1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.,
1., 1., 1., 1.]])
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.