我有一个名为"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]])