У меня есть два двумерных облака точек (oldPts и newPts), которые я хочу объединить. Это массивы mx2 и nx2 numpyinteger с m и n порядка 2000. newPts содержит много дубликатов или почти дубликатов oldPts, и мне нужно удалить их перед объединением.
До сих пор я использовал функцию histogram2d для получения 2d представления oldPts (H). Затем я сравниваю каждый newPt с NxN-областью H, и если он пуст, я принимаю точку. Эту последнюю часть я сейчас делаю с циклом Python, который я хотел бы удалить. Кто-нибудь может показать мне, как сделать это с помощью трансляции, или, возможно, предложить совершенно другой метод решения проблемы. рабочий код ниже
npzfile = np.load(path+datasetNo+'\\temp.npz')
arrs = npzfile.files
oldPts = npzfile[arrs[0]]
newPts = npzfile[arrs[1]]
# remove all the negative values
oldPts = oldPts[oldPts.min(axis=1)>=0,:]
newPts = newPts[newPts.min(axis=1)>=0,:]
# round to integers
oldPts = np.around(oldPts).astype(int)
newPts = newPts.astype(int)
# put the oldPts into 2d array
H, xedg,yedg= np.histogram2d(oldPts[:,0],oldPts[:,1],
bins = [xMax,yMax],
range = [[0, xMax], [0, yMax]])
finalNewList = []
N = 5
for pt in newPts:
if not H[max(0,pt[0]-N):min(xMax,pt[0]+N),
max(0,pt[1]- N):min(yMax,pt[1]+N)].any():
finalNewList.append(pt)
finalNew = np.array(finalNewList)