我有这个数组(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列,我看不到如何简单地实现它。 我可以做一个循环,但是我的数组可以很大。
有没有办法更有效地做到这一点?
答案 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)
我认为您想这样做?
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.]]