我有一个包含 numpy 数组的列表,并想使用两个数字重新排列它。这是我的清单:
all_data=[np.array([[1., 1., 0.],[1., 1., 0.2],[1., 1., 0.1]]),\
np.array([[2., 2., 0.1],[2., 2., 0.1],[2., 2., 0.1]]),\
np.array([[3., 3., 0.2],[3., 3., 0.2],[3., 3., 0.2]]),\
np.array([[1., 1., 100.],[1., 1., 110.],[1., 1., 110.]]),\
np.array([[2., 2., 100.],[2., 2., 100.],[2., 2., 100.]]),\
np.array([[3., 3., 100.],[3., 3., 110.],[3., 3., 120.]])]
这些是我的号码:
n_iteration=3
n_layer=2
n_iteration
给出了我拥有的迭代次数,n_layer
给出了我在每次迭代中拥有的数据集数量。这意味着我在每次迭代中都有两个数据集。目前,我的 all_data
有 6
数组。前三个数组表示与三个迭代中的第一个数据集相关的数据。最后三个数组也是第三次迭代中下一个数据集的数据。换句话说,数据集是根据它们的迭代次数排序的,但我想根据数据集对迭代进行排序。我已经编写了一些简单的数据,以从我的 all_data
到所需的输出之间产生视觉差异。我想要一个子列表列表,其中子列表的数量等于 n_iteration
,每个子列表中的数组数量等于 n_layer
:
[[np.array([[1., 1., 0.],[1., 1., 0.2],[1., 1., 0.1]]),\
np.array([[1., 1., 100.],[1., 1., 110.],[1., 1., 110.]])],\
[np.array([[2., 2., 0.1],[2., 2., 0.1],[2., 2., 0.1]]),\
np.array([[2., 2., 100.],[2., 2., 100.],[2., 2., 100.]])],\
[np.array([[3., 3., 0.2],[3., 3., 0.2],[3., 3., 0.2]]),\
np.array([[3., 3., 100.],[3., 3., 110.],[3., 3., 120.]])]]
我尝试了以下代码,但它给了我其他东西:
arranged_data=[]
for i in range (int (len(all_data)/n_iteration)):
arranged_data.append([all_data[i], all_data[int (i+n_layer)]])
提前,我非常感谢您的帮助。
答案 0 :(得分:1)
我不知道我是否明白这一点,但也许这按预期工作。或者不。
我正在使用这个数据输入,它更具可读性:
all_data=[np.array([[1.],[2.],[3.]]),
np.array([[4.],[4.],[4.]]),
np.array([[5.],[5.],[5.]]),
np.array([[6.],[7.],[7.]]),
np.array([[8.],[8.],[8.]]),
np.array([[9.],[10.],[11.]])]
首先将列表转换成一个numpy数组:
data_np = np.array(all_data)
然后,给定变量,使用要分组的行的索引构建一个数组:
layers = 3
iterations = 2
rows = np.array([np.array([i, i+layers]) for i in range(layers)])
rows
结果在哪里
array([[0, 3],
[1, 4],
[2, 5]])
现在,使用 numpy 索引:
res = data_np[rows]
重塑 res
数组,你应该得到你的输出(作为一个 numpy 数组):
res.reshape(1, layers, iterations, layers)[0]
# array([[[ 1., 2., 3.],
# [ 6., 7., 7.]],
#
# [[ 4., 4., 4.],
# [ 8., 8., 8.]],
#
# [[ 5., 5., 5.],
# [ 9., 10., 11.]]])