Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/280.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中的第一个元素转换多数组?_Python_Arrays_Loops_Zip_Coding Efficiency - Fatal编程技术网

如何根据Python中的第一个元素转换多数组?

如何根据Python中的第一个元素转换多数组?,python,arrays,loops,zip,coding-efficiency,Python,Arrays,Loops,Zip,Coding Efficiency,我有这样一个数组: [[0,21], [1,23], [1,21], [0,23], [1,24]] 将其转换为以下两个阵列的最快方法是什么: a = [21,23] b = [21,23,24] 我知道用循环来做这个,有没有库可以做这个 您可以使用numpy执行此操作:- import numpy a=[[0,21], [1,23], [1,21], [0,23], [1,24]] b=numpy.array(a) c = numpy.array([[Fa

我有这样一个数组:

[[0,21], 
 [1,23], 
 [1,21], 
 [0,23], 
 [1,24]]
将其转换为以下两个阵列的最快方法是什么:

a = [21,23]
b = [21,23,24]

我知道用循环来做这个,有没有库可以做这个

您可以使用numpy执行此操作:-

import numpy
a=[[0,21], 
 [1,23], 
 [1,21], 
 [0,23], 
 [1,24]]

b=numpy.array(a)
c = numpy.array([[False,True],[False,True],[False,True],[False,True],[False,True]])
print(b[c][:2])
print(b[c][2:])

或者,我们可以通过numpy.arange()来实现。我们通过给每个嵌套数组中我们想要的元素的索引,从b创建数组c。在这里,我们需要来自每个嵌套数组的第二个元素。在本例中,这里是(1,1,1,1)。在获得数组c之后,我们按照需要进行切片

import numpy
a=[[0,21], 
 [1,23], 
 [1,21], 
 [0,23], 
 [1,24]]

b=numpy.array(a)
c=b[numpy.arange(len(b)),[1,1,1,1,1]]
print(c[:2])
print(c[2:])

转换背后的逻辑不清楚。如果数组[i][0]==1,它将转到b,如果0,它将转到a,则在
itertools中放置错误的21,21应该是21,23。groupby
是可以使此解决方案更优雅的库。我们是否需要定义过滤器变量,如[1,1,1,1,1]?@kira,是的,您需要从每个嵌套数组中给出所需元素的索引。在你的情况下,你需要21,23,21,23,24。在这些数组中每个都有索引1。所以使用了[1,1,1,1,1],所以我们需要在列表中计算1,不需要计算。只需提供每个数组中元素的索引。我们正在提供我们想要从这些嵌套数组中得到的元素的索引(根据嵌套数组)。这意味着我们需要首先生成索引数组