5

关于以下问题的后续问题:

如何在 Python 中使用 MATLAB 中的 unique(a, 'rows')?

那里的答案解释了如何获得唯一的行。然而,matlab 还返回创建的每一行的频率。任何用python制作的优雅方法?

谢谢!

4

3 回答 3

1

您可以使用花哨的索引和评估以下条件来计算每个唯一行的数量:

from numpy import unique, array, all
def myunique(input):
    u = array([array(x) for x in set(tuple(x) for x in input)])
    return u, array([len(input[all(input==x, axis=1)]) for x in u],dtype=int)

例子:

a = array([list('1234'),
           list('1234'),
           list('1222'),
           list('1222'),
           list('1234')],dtype=str)

print myunique(a)
#(array([['1', '2', '2', '2'],
#        ['1', '2', '3', '4']],
#       dtype='|S1'), array([2, 3]))
于 2013-06-19T15:19:55.027 回答
1

numpy_indexed包(免责声明:我是它的作者)有一个功能可以有效地做到这一点

import numpy_indexed as npi
m = np.random.randint(0, 2, (20, 3))
unique, count = npi.count(m)
于 2016-04-02T19:47:46.910 回答
-1

我曾经遇到过这个问题。我做了以下事情:与其说是一个优雅的 hack,不如说是一个完美的解决方案。

首先将您的二维数组转换为一维数组或可散列列表,然后从那里很容易。转换为一维浮点数组的一种方法是使用 D 维随机向量进行点积。例如:

a = np.array([[1.32,1,4],[2,3,3.5],[1.32,1,4],[4,5,6.2]])

b = np.random.randint(1,10**20,3)

c = np.dot(a,b)
vals, idx = np.unique(c,True)
于 2013-06-19T14:23:08.253 回答