Python3:删除具有相同坐标(x,y)的数组元素

时间:2020-08-14 12:59:31

标签: python arrays python-3.x numpy numpy-ndarray

我有这个数组(x,y,f(x,y)):

a=np.array([[ 1,  5,  3],
   [ 4,  5,  6],
   [ 4,  5, 6.1],
   [ 1,  3, 42]])

我想删除具有相同x,y的重复项。在我的数组中,我有(4,5,6)和(4,5,6.1),我想删除其中之一(无条件)。

如果我有2列(x,y),我可以使用

np.unique(a[:,:2], axis = 0) 

但是我的数组有3列,我看不到如何简单地实现它。 我可以做一个循环,但是我的数组可以很大。

有没有办法更有效地做到这一点?

2 个答案:

答案 0 :(得分:1)

如果我理解正确,那么您需要这样做:

a[np.unique(a[:,:2],axis=0,return_index=True)[1]]

输出:

[[ 1.  3. 42.]
 [ 1.  5.  3.]
 [ 4.  5.  6.]]

请注意,它不会保留a中的原始行顺序。如果要保留顺序,只需对索引进行排序:

a[np.sort(np.unique(a[:,:2],axis=0,return_index=True)[1])]

输出:

[[ 1.  5.  3.]
 [ 4.  5.  6.]
 [ 1.  3. 42.]]

答案 1 :(得分:0)

我认为您想这样做?

  • np.rint会将您的数字四舍五入到一个整数

import numpy as np

a = np.array([
   [ 1,  5,  3],
   [ 4,  5,  6],
   [ 4,  5, 6.1],
   [ 1,  3, 42]
   ])

a = np.unique(np.rint(a), axis = 0) 

print(a)

//result :
[[ 1.  3. 42.]
 [ 1.  5.  3.]
 [ 4.  5.  6.]]
相关问题