擅长:python、mysql、java
<p>查看<a href="http://docs.scipy.org/doc/numpy/reference/generated/numpy.unique.html" rel="nofollow">^{<cd1>}</a>和{a2}。在</p>
<p>例如</p>
<pre><code>import numpy as np
x = (np.random.random(100) * 5).astype(np.int)
unique_vals, indicies = np.unique(x, return_inverse=True)
counts = np.bincount(indicies)
print unique_vals, counts
</code></pre>
<p>你的问题,我读错了。。。在</p>
<p>获取唯一行的一种方法是将对象视为结构化数组。。。在</p>
<p>在你的例子中,你有一个二维数组的bools。所以也许是这样?在</p>
^{pr2}$
<p>当然,你最初的做法并没有错。。。只是为了展示一种稍微简洁的编写原始函数的方法(使用tuples,正如Justin建议的那样):</p>
<pre><code>def unique_rows(data):
unique = dict()
for row in data:
row = tuple(row)
if row in unique:
unique[row] += 1
else:
unique[row] = 1
return unique
</code></pre>
<p>我们可以进一步使用defaultdict:</p>
<pre><code>from collections import defaultdict
def unique_rows(data):
unique = defaultdict(int)
for row in data:
unique[tuple(row)] += 1
return unique
</code></pre>
<p>碰巧的是,这两种选择中的任何一种似乎都比“numpy thonic”的方式更快。。。)我早就猜到了!不过,像您在原始示例中所做的那样,将行转换为字符串是很慢的。你肯定想比较元组而不是字符串)。在</p>