繁体   English   中英

从numpy中的矩阵中提取唯一的行,其中包含创建的每一行的频率

[英]Extract unique rows from a matrix in numpy with the frequency of each row that was created

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

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

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

谢谢!

您可以使用花式索引计算每个唯一行的数量,并评估如下条件:

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]))

numpy_indexed包(免责声明:我是它的作者)有一个功能,它以一种有效的方式完成:

import numpy_indexed as npi
m = np.random.randint(0, 2, (20, 3))
unique, count = npi.count(m)

我曾经遇到过这个问题。 我做了以下事情:不是一个完美的解决方案,而是一个优雅的黑客。

首先将您的2d阵列转换为1D阵列或可清洗列表,从那里很容易。 转换为1D浮点数阵列的一种方法是采用具有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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM