擅长:python、mysql、java
<p>要在numpy中执行此操作,请使用<code>np.unique</code>。在</p>
<pre><code>def count_unique(arr):
row_view=np.ascontiguousarray(a).view(np.dtype((np.void,a.dtype.itemsize * a.shape[1])))
ua, uind = np.unique(row_view,return_inverse=True)
unique_rows = ua.view(a.dtype).reshape(ua.shape + (-1,))
count=np.bincount(uind)
return np.hstack((unique_rows,count[:,None]))
</code></pre>
<p>首先让我们检查一个小数组:</p>
^{pr2}$
<p>看起来不错!现在让我们检查一个大数组:</p>
<pre><code>a=np.random.rand(3E7,3)
a=np.around(a,1)
output=count_unique(a)
print output.shape
(1331, 4) #Close as I can get to 600 unique elements.
print np.sum(output[:,-1])
30000000.0
</code></pre>
<p>在我的机器上需要大约33秒的时间和3GB的内存,在内存中为大型阵列执行这些操作可能是您的瓶颈。作为参考,@Joowani的解决方案花费了大约130秒,尽管这有点像苹果和橘子的比较,因为我们从一个numpy数组开始。你的身份可能不同。在</p>
<p>要以numpy数组的形式读入数据,我将查看问题<a href="https://stackoverflow.com/questions/18259393/">here</a>,但它应该类似于以下内容:</p>
<pre><code>arr=np.genfromtxt("./input.txt", delimiter=" ")
</code></pre>
<p>从一个txt文件加载那么多的数据,我真的推荐使用这个链接中的<code>pandas</code>示例。在</p>