[英]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.