각 요소가 실수 인 1000 x 1000 크기의 np 배열 X가 있습니다. 이 np 배열의 각 행에있는 모든 점에 대해 가장 가까운 5 개의 점을 찾고 싶습니다. 여기서 거리 메트릭은 abs (xy) 일 수 있습니다. 나는하려고 노력했다
for i in range(X.shape[0]):
knn = NearestNeighbors(n_neighbors=5)
knn.fit(X[i])
for j in range(X.shape[1])
d = knn.kneighbors(X[i,j], return_distance=False)
그러나 이것은 나를 위해 작동하지 않으며 이것이 얼마나 효율적인지 확신하지 못합니다. 이 문제를 해결할 방법이 있습니까? 벡터를 비교하는 방법은 많이 보았지만 단일 요소를 비교하는 방법은 없습니다. for 루프와 루프를 사용하여 가장 작은 k를 찾을 수 있다는 것을 알고 있지만 이것은 계산 비용이 많이 듭니다. KD 트리가이를 위해 작동 할 수 있습니까? 나는 비슷한 방법을 시도했다
x 및 y 좌표의 numpy 배열에서 가장 가까운 지점의 색인 찾기
그러나 나는 이것을 작동시킬 수 없습니다. 이것을 달성 할 수있는 내가 모르는 몇 가지 기능이 있습니까?
scipy.spatial.cKDTree
데이터의 각 행에 대해 kdtree를 생성합니다.
import numpy as np
import scipy.spatial
def nearest_neighbors(arr, k):
k_lst = list(range(k + 2))[2:] # [2,3]
neighbors = []
for row in arr:
# stack the data so each element is in its own row
data = np.vstack(row)
# construct a kd-tree
tree = scipy.spatial.cKDTree(data)
# find k nearest neighbors for each element of data, squeezing out the zero result (the first nearest neighbor is always itself)
dd, ii = tree.query(data, k=k_lst)
# apply an index filter on data to get the nearest neighbor elements
closest = data[ii].reshape(-1, k)
neighbors.append(closest)
return np.stack(neighbors)
N = 1000
k = 5
A = np.random.random((N, N))
nearest_neighbors(A, k)
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다