【问题标题】:How to reshape numpy array in this way?如何以这种方式重塑numpy数组?
【发布时间】:2018-09-02 09:11:52
【问题描述】:

我想将a重塑为b,如何快速实现?

基本上,在重塑数组时,如何始终使用每个组中的第一项,然后是第二项,然后是第三项?

输入:

import numpy as np

# 3 repeats, each has 2 variables, each has 4 times
a=np.array([[['r1_v1_t1','r1_v1_t2','r1_v1_t3','r1_v1_t4'],
            ['r1_v2_t1','r1_v2_t2','r1_v2_t3','r1_v2_t4']],

[['r2_v1_t1','r2_v1_t2','r2_v1_t3','r2_v1_t4'],
            ['r2_v2_t1','r2_v2_t2','r2_v2_t3','r2_v2_t4']],

[['r3_v1_t1','r3_v1_t2','r3_v1_t3','r3_v1_t4'],
            ['r3_v2_t1','r3_v2_t2','r3_v2_t3','r3_v2_t4']]
            ])

# 4 times, each has 3 repeats, each has 2 variables
b=np.array([[['r1_v1_t1','r1_v2_t1'],['r2_v1_t1','r2_v2_t1'],['r3_v1_t1','r3_v2_t1']],
[['r1_v1_t2','r1_v2_t2'],['r2_v1_t2','r2_v2_t2'],['r3_v1_t2','r3_v2_t2']],
[['r1_v1_t3','r1_v2_t3'],['r2_v1_t3','r2_v2_t3'],['r3_v1_t3','r3_v2_t3']],
[['r1_v1_t4','r1_v2_t4'],['r2_v1_t4','r2_v2_t4'],['r3_v1_t4','r3_v2_t4']]])

# 4 times, each has 2 variables, each has 3 repeats
#print(a.T)

#print(np.reshape(a,(4,3,2), order='F')) not work
#print(np.reshape(a,(4,3,2))) not work

【问题讨论】:

  • 你不能只做a.reshape(b.shape, order='F')吗?
  • b=a.T 转置即可。
  • 谢谢!转置有效!抱歉,我实际上是在尝试解决一个更复杂的问题,所以我现在重新编辑了这个问题。

标签: arrays python-3.x numpy multidimensional-array reshape


【解决方案1】:

您可以交换数组的轴,使a 的形状与b 的形状相匹配。 Numpy 的swapaxes 可以做到这一点:

new_a = np.swapaxes( np.swapaxes(a,0,2) ,1,2)

您可以测试这个new_a 是否等同于b

print (new_a == b).all()  # True

这是一个有效的gist

【讨论】:

  • 太棒了!太强大了!
猜你喜欢
  • 2020-04-04
  • 1970-01-01
  • 2022-12-06
  • 1970-01-01
  • 2021-04-18
  • 2023-03-23
  • 1970-01-01
  • 2017-11-11
  • 1970-01-01
相关资源
最近更新 更多