<p>这是复杂的,但它可能是最好的,你将得到使用纽比只。。。在</p>
<p>首先,我们使用<a href="http://docs.scipy.org/doc/numpy/reference/generated/numpy.lexsort.html" rel="nofollow">^{<cd1>}</a>将具有相同坐标的所有条目放在一起。使用<code>a</code>作为示例数组:</p>
<pre><code>>>> perm = np.lexsort(a[:, 3::-1].T)
>>> a[perm]
array([[ 0.12080023, 0.74853649, 0.15356663, 0.4505753 ],
[ 0.7732126 , 0.48649481, 0.29771819, 0.91622924],
[ 0.7732126 , 0.48649481, 0.29771819, 1.91622924],
[ 0.1877724 , 0.96060999, 0.39697999, 0.59078612],
[ 0.3239913 , 0.7786444 , 0.41692853, 0.10467392],
[ 0.58294263, 0.32025559, 0.6925856 , 0.0524125 ],
[ 0.58294263, 0.32025559, 0.6925856 , 0.05 ],
[ 0.58294263, 0.32025559, 0.6925856 , 1.7 ],
[ 0.13536096, 0.60319054, 0.82018125, 0.10445047]])
</code></pre>
<p>注意,通过反转轴,我们按<code>x</code>排序,断开与<code>y</code>的联系,然后<code>z</code>,然后{<cd6>}。在</p>
<p>因为这是我们要寻找的最大值,所以我们只需要在每个组中取最后一个条目,这是一件非常简单的事情:</p>
^{pr2}$
<p>{如果你不能按照原始数组的顺序来排序,那么你也可以按照原来的顺序排列它们:</p>
<pre><code>>>> a_unique_max[np.argsort(perm[last])]
array([[ 0.7732126 , 0.48649481, 0.29771819, 1.91622924],
[ 0.58294263, 0.32025559, 0.6925856 , 1.7 ],
[ 0.3239913 , 0.7786444 , 0.41692853, 0.10467392],
[ 0.12080023, 0.74853649, 0.15356663, 0.4505753 ],
[ 0.13536096, 0.60319054, 0.82018125, 0.10445047],
[ 0.1877724 , 0.96060999, 0.39697999, 0.59078612]])
</code></pre>
<p>这只会最大限度地发挥作用,它是排序的副产品。如果您使用的是不同的函数,比如所有相同坐标项的乘积,您可以执行以下操作:</p>
<pre><code>>>> first = np.concatenate(([True],
np.all(a_sorted[:-1, :3] != a_sorted[1:, :3], axis=1)))
>>> a_unique_prods = np.multiply.reduceat(a_sorted, np.nonzero(first)[0])
</code></pre>
<p>你需要花一点时间来处理这些结果来组装你的返回数组。在</p>