Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何基于两个条件拆分numpy数组列表_Python_Arrays_List_Numpy_Split - Fatal编程技术网

Python 如何基于两个条件拆分numpy数组列表

Python 如何基于两个条件拆分numpy数组列表,python,arrays,list,numpy,split,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.arr

我有一个包含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_迭代
给出了我拥有的迭代次数,
n_层
给出了我在每次迭代中拥有的数据集数量。这意味着我在每次迭代中有两个数据集。目前,我的
所有数据
都有
6个
数组。前三个数组表示三次迭代中与第一个数据集相关的数据。最后三个ARAY也是三次迭代中下一个数据集的数据。换句话说,数据集是根据迭代次数排序的,但我想根据数据集对迭代进行排序。我已经编写了一些简单的数据,以使我的
所有数据
与所需的输出在视觉上有所不同。我想要一个子列表,其中子列表的数量等于
n_迭代
,每个子列表中的数组数量等于
n_层

[[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)]])

在此之前,我非常感谢您的帮助。

我不知道我是否理解了要点,但也许这正如预期的那样起作用。或者不是

我使用的是更可读的数据输入:

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)
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.]]])
然后,给定变量,使用要分组的行的索引构建一个数组:

layers = 3
iterations = 2
rows = np.array([np.array([i, i+layers]) for i in range(layers)])
其中,
导致

array([[0, 3],
       [1, 4],
       [2, 5]])
现在,使用numpy索引:

res = data_np[rows]
重新调整
res
数组的形状,您应该获得输出(作为numpy数组):


冒着我误解这个问题的风险:为什么不从初始列表中创建另一个numpy数组,并根据
n_迭代
n_层
?亲爱的@Roland Deschain,可以这样做吗?我只想最后有一个列表,其中有一些子列表,这些子列表是在每次迭代中创建的数据集。只需使用
my\u nparray=np.array(所有数据)。重塑(n\u迭代,n\u层,3,3)
。它将为您提供一个数组,该数组应具有所需的形状。从这里开始,只需将其返回(np.array有一个tolist()方法)。我不确定这是否是最有效的方法,但如果重塑参数与阵列匹配,它应该会起作用。亲爱的@Roland Deschain,感谢您为我的问题抽出时间。我试过你的解决办法,但它给了我别的东西。结果与我预期的结果不一样。存在重复的结果,使得很难将所需的输出链接到输入。也许你想去掉重复的元素,然后在一个例子中明确每个元素的去向,我指的是输入和输出元素之间的单一关系。亲爱的@iGian,谢谢你的解决方案,但关键是你的方法不适用于我的输入数据。您已经更改了输入,当我尝试使用此方法进行自己的输入时,我无法实现我想要的。