如何根据两个条件拆分 numpy 数组列表

时间:2021-03-31 13:41:11

标签: python arrays list numpy split

我有一个包含 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_data6 数组。前三个数组表示与三个迭代中的第一个数据集相关的数据。最后三个数组也是第三次迭代中下一个数据集的数据。换句话说,数据集是根据它们的迭代次数排序的,但我想根据数据集对迭代进行排序。我已经编写了一些简单的数据,以从我的 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)]])

提前,我非常感谢您的帮助。

1 个答案:

答案 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.]]])
相关问题