重塑 np 数组的块



我有一个名为"all_runs"的numpy数组,它由我在函数中附加在一起的数百个np数组组成。下面是我附加两个数组时的外观示例:

[0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2]    

我想将其重塑为以下内容:


0      1       2
0      1       2
0      1       2
0      1       2
0      1       2
0      1       2
0      1       2
0      1       2

我试过这个:

df = pd.DataFrame(all_runs.reshape(3, 8))

但它没有给出我想要的结果:

0      0       0
0      1       1
1      1       2
2      2       2
0      0       0
0      1       1
1      1       2
2      2       2

有没有一种有效的方法来拆分数组并以上面显示的格式重塑它?

在一行中:

a = np.array([0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2])
print(np.vstack(np.hsplit(a.reshape(6,4).transpose(),2)))

输出:

[[0 1 2]
[0 1 2]
[0 1 2]
[0 1 2]
[0 1 2]
[0 1 2]
[0 1 2]
[0 1 2]]

最好以不同的方式创建数组,这样就不必重塑数组。在创建数组时将数组格式化为其形状可能比追加然后重塑更简单。

无论如何,在重塑时,您必须考虑轴的顺序。它最终有点复杂,但你可以试试这个:

arr = np.array([0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2])
np.vstack(arr.reshape([2, -1]).reshape(2, 3, -1).transpose([0, 2, 1]))

输出:

array([[0, 1, 2],
[0, 1, 2],
[0, 1, 2],
[0, 1, 2],
[0, 1, 2],
[0, 1, 2],
[0, 1, 2],
[0, 1, 2]])

对数组进行排序,然后将其调整为。

import numpy as np
test = [0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2]
test = np.asarray(test)
np.sort().reshape(3,8)

输出

array([[0, 0, 0, 0, 0, 0, 0, 0],
[1, 1, 1, 1, 1, 1, 1, 1],
[2, 2, 2, 2, 2, 2, 2, 2]])

最新更新