删除nd-array中相同子数组的最快方法?

时间:2014-10-14 15:03:28

标签: python arrays numpy

让我们考虑一个二维数组 A

2   3   5   7
2   3   5   7
1   7   1   4
5   8   6   0
2   3   5   7

第一行,第二行和最后一行是相同的。我要查找的算法应该返回一个只有一条相同行的二维数组,以及得到的二维数组中每一行的相同行数。 我使用低效的朴素算法来做到这一点:

import numpy
A=numpy.array([[2,  3,  5,  7],[2,  3,  5,  7],[1,  7,  1,  4],[5,  8,  6,  0],[2,  3,  5,  7]])
i=0
end = len(A)
while i<end:
    print i,
    j=i+1
    numberID = 1
    while j<end:
        print j
        if numpy.array_equal(A[i,:] ,A[j,:]):
            A=numpy.delete(A,j,axis=0)
            end-=1
            numberID+=1
        else:
            j+=1
    i+=1
print A, len(A)

预期结果:

array([[2, 3, 5, 7],
       [1, 7, 1, 4],
       [5, 8, 6, 0]]) # 2d-array freed from identical lines
array([3,1,1]) # number identical arrays per line

这个算法看起来像在numpy中使用python native这么低效。谢谢你的帮助。

0 个答案:

没有答案