Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/296.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_Numpy - Fatal编程技术网

Python中按顺序从多个数组中获取最小数组

Python中按顺序从多个数组中获取最小数组,python,numpy,Python,Numpy,假设我有4个numpy数组 [1,2,3] [2,3,1] [3,2,1] [1,3,2] 在本例中,我已经确定[1,2,3]是我的“最小数组”,因为它是索引为0的两个数组中的一个,在这两个数组中,它的索引为1。如果有更多具有类似值的数组,我需要比较下一个索引值,依此类推 如何从堆中以相同的顺序提取数组[1,2,3] 如何将其扩展到大小为n的x阵列 感谢使用python non-numpy.sort()或sorted()对列表列表(不是numpy数组)自动执行此操作,例如 a = [[1,2,3

假设我有4个numpy数组 [1,2,3] [2,3,1] [3,2,1] [1,3,2]

在本例中,我已经确定[1,2,3]是我的“最小数组”,因为它是索引为0的两个数组中的一个,在这两个数组中,它的索引为1。如果有更多具有类似值的数组,我需要比较下一个索引值,依此类推

如何从堆中以相同的顺序提取数组[1,2,3]

如何将其扩展到大小为n的x阵列


感谢使用python non-numpy.sort()或sorted()对列表列表(不是numpy数组)自动执行此操作,例如

a = [[1,2,3],[2,3,1],[3,2,1],[1,3,2]]
a.sort()
给予

numpy排序似乎只对子数组进行递归排序,因此最好的方法是首先将其转换为python列表。假设您有一个数组,您希望选择其中的最小值,那么可以将最小值作为

sorted(a.tolist())[0]

正如有人指出的那样,您也可以使用与排序相同类型的比较来执行
min(a.tolist())
,并且对于大型数组(线性vs n log n渐近运行时间)会更快。

使用numpy有一个想法:

import numpy

a = numpy.array([[1,2,3],[2,3,1],[3,2,1],[1,3,2]])

col = 0
while a.shape[0] > 1:
    b = numpy.argmin(a[:,col:], axis=1)
    a = a[b == numpy.min(b)]
    col += 1

print a

这将逐列检查,直到只剩下一行。

numpy的lexsort接近您想要的。它首先按最后一个键排序,但这很容易找到:

>>> a = np.array([[1,2,3],[2,3,1],[3,2,1],[1,3,2]])
>>> order = np.lexsort(a[:, ::-1].T)
>>> order
array([0, 3, 1, 2])
>>> a[order]
array([[1, 2, 3],
       [1, 3, 2],
       [2, 3, 1],
       [3, 2, 1]])

谢谢,排序(a.tolist())[0]是我要找的。干杯如果你能把一个numpy数组转换成list,你就可以不用调用min(l)了。回答得好(+1)。但为了扩展这一点,我想补充一点,排序需要O(nlogn)时间,而您可以执行
min(a.tolist())
并在O(n)时间内获得所需的内容。
>>> a = np.array([[1,2,3],[2,3,1],[3,2,1],[1,3,2]])
>>> order = np.lexsort(a[:, ::-1].T)
>>> order
array([0, 3, 1, 2])
>>> a[order]
array([[1, 2, 3],
       [1, 3, 2],
       [2, 3, 1],
       [3, 2, 1]])