从n个np.array中找到m个“最小”元素

李雨

我有一个二维数组ndarray,大小mnm<=n),如下所示:

a = [ [1, 2, 3], 
      [4, 5, 6] ]

现在,我想m从数组中贪婪地找到“最小”元素,并限制每个行和列只能选择一个元素,每次选择全局最小值。我的代码如下:

for k in xrange(m):
    index = np.argmin(a)
    i, j = divmod(index, n-k)
    result.append(a[i][j])
    a = np.delete(np.delete(a, i, 0), j, 1)

所以我会得到result = [1, 5],有没有更好的方法来表示输入数组a,以及找到速度更快的这些元素的更好算法?

彼得·韦普雷克

我只是尝试了另一种方法:

import numpy as np
import timeit

nmin = 2000 # number of the smallest values to find in a matrix with unique row and column indexes
nrows = 2000 # number of rows
ncols = 2000 # number of columns
print "Select {} smallest values from {} x {} matrix".format(nmin, nrows, ncols)

matrix = np.random.uniform(0, 1, size = nrows * ncols).reshape(nrows, ncols) # sample 2D array
#print matrix

# ALTERNATIVE: sort once and track-and-skip visited rows and columns
startedat = timeit.default_timer()
seenrows = set()
seencols = set()
order = (divmod(index, ncols) for index in np.argsort(matrix, None))
for iter in xrange(nmin):
    while True:
        try:
            current = order.next()
        except:
            break
        if current[0] not in seenrows and current[1] not in seencols:
            #print iter, current, matrix[current[0]][current[1]]
            seenrows.add(current[0])
            seencols.add(current[1])
            break
alternative = timeit.default_timer() - startedat
print "Alternative approach took: ", alternative

# ORIGINAL: repeatedly find minimum and update matrix
startedat = timeit.default_timer()
for k in xrange(nmin):
    index = np.argmin(matrix)
    i, j = divmod(index, np.shape(matrix)[1])
    #print k, (i, j), matrix[i][j]
    matrix = np.delete(np.delete(matrix, i, 0), j, 1)
    if matrix.size == 0: break
original = timeit.default_timer() - startedat
print "   Original approach took: ", original, "WINNER" if original < alternative else "TIE" if original == alternative else "LOOSER"

结果如下:

Select 2 smallest values from 2000 x 2000 matrix
Alternative approach took:  0.737312265981
   Original approach took:  0.0572765855289 WINNER

Select 20 smallest values from 2000 x 2000 matrix
Alternative approach took:  0.732718787079
   Original approach took:  0.564769882057 WINNER

Select 200 smallest values from 2000 x 2000 matrix
Alternative approach took:  0.736015078962
   Original approach took:  5.14679721535 LOOSER

Select 2000 smallest values from 2000 x 2000 matrix
Alternative approach took:  6.46196502191
   Original approach took:  19.2116744154 LOOSER

Select 20000 smallest values from 2000 x 2000 matrix
Alternative approach took:  7.90157398272
   Original approach took:  19.189003763 LOOSE

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在O(log n)中找到第k个最小元素

来自分类Dev

从两个排序的数组中找到第k个最小的元素

来自分类Dev

如何从n个元素中找到k个置换的索引?

来自分类Dev

如何从n个元素中找到k个置换的索引?

来自分类Dev

如何在C ++中找到向量的第m个和第n个元素之间的max元素?

来自分类Dev

在数组中找到两个最小的非后续元素

来自分类Dev

在2个向量中找到对元素

来自分类Dev

从数组中找到匹配条件的前n个元素

来自分类Dev

如何在Prolog中找到列表的第N个元素

来自分类Dev

在数组中找到n个最大的元素

来自分类Dev

从数组中找到匹配条件的前n个元素

来自分类Dev

在SQL中找到第N个最大元素

来自分类Dev

在列表中找到2 ^ n -2个元素的组合

来自分类Dev

jquery如何从元素变量中找到第n个孩子

来自分类Dev

考虑到数组未排序且 n 是数组的大小,如何在 nk 个比较中找到 k 个最小元素之一

来自分类Dev

在3维矩阵(或n维)中找到最小元素的索引

来自分类Dev

在3维矩阵(或n维)中找到最小元素的索引

来自分类Dev

在n个可能的不同位置中找到k个对象之间的最大最小距离?

来自分类Dev

在一个numpy数组中找到n个最小的项

来自分类Dev

从n个元素的数组中找到等于或接近其元素总和的2个子数组

来自分类Dev

从无穷多个数字中找到最后k个元素中的最小数字

来自分类Dev

Matlab在列中找到x个最小值的索引

来自分类Dev

从Python列表中找到5个最小的数字

来自分类Dev

在python中找到两个局部最小值

来自分类Dev

在列表中找到元素的前一个元素(Haskell)

来自分类Dev

在一个巨大的numpy数组中找到N个元素的位置(索引)

来自分类Dev

如何在二维numpy矩阵中找到前n个最小值

来自分类Dev

在数组中找到前k个元素

来自分类Dev

在列表中找到2个元素并返回true kotlin?

Related 相关文章

  1. 1

    在O(log n)中找到第k个最小元素

  2. 2

    从两个排序的数组中找到第k个最小的元素

  3. 3

    如何从n个元素中找到k个置换的索引?

  4. 4

    如何从n个元素中找到k个置换的索引?

  5. 5

    如何在C ++中找到向量的第m个和第n个元素之间的max元素?

  6. 6

    在数组中找到两个最小的非后续元素

  7. 7

    在2个向量中找到对元素

  8. 8

    从数组中找到匹配条件的前n个元素

  9. 9

    如何在Prolog中找到列表的第N个元素

  10. 10

    在数组中找到n个最大的元素

  11. 11

    从数组中找到匹配条件的前n个元素

  12. 12

    在SQL中找到第N个最大元素

  13. 13

    在列表中找到2 ^ n -2个元素的组合

  14. 14

    jquery如何从元素变量中找到第n个孩子

  15. 15

    考虑到数组未排序且 n 是数组的大小,如何在 nk 个比较中找到 k 个最小元素之一

  16. 16

    在3维矩阵(或n维)中找到最小元素的索引

  17. 17

    在3维矩阵(或n维)中找到最小元素的索引

  18. 18

    在n个可能的不同位置中找到k个对象之间的最大最小距离?

  19. 19

    在一个numpy数组中找到n个最小的项

  20. 20

    从n个元素的数组中找到等于或接近其元素总和的2个子数组

  21. 21

    从无穷多个数字中找到最后k个元素中的最小数字

  22. 22

    Matlab在列中找到x个最小值的索引

  23. 23

    从Python列表中找到5个最小的数字

  24. 24

    在python中找到两个局部最小值

  25. 25

    在列表中找到元素的前一个元素(Haskell)

  26. 26

    在一个巨大的numpy数组中找到N个元素的位置(索引)

  27. 27

    如何在二维numpy矩阵中找到前n个最小值

  28. 28

    在数组中找到前k个元素

  29. 29

    在列表中找到2个元素并返回true kotlin?

热门标签

归档