I'm trying to translate a Matlab script into Numpy. This is part of the Matlab code:
function [idx,D]=knnsearch(varargin)
[N,M] = size(Q);
L=size(R,1);
idx = zeros(N,K);
D = idx;
for k=1:N
d=zeros(L,1);
for t=1:M
d=d+(R(:,t)Q(k,t)).^2;
end
d(k)=inf;
[D(k),idx(k)]=min(d);
end
where Q and R are matrices that can be considered e.g. as eye(5) ; you can consider K = 1 . An example function call could be:
Q = eye(5);
R = eye(5);
[idx,D] = knnsearch(Q,R,1);
which returns:
idx:
2
1
1
1
1
D:
2
2
2
2
2
This is the Numpy code:
import numpy as np
def knnsearch(Q, R, K):
(N,M) = Q.shape
L = len(R[:,1])
idx = np.zeros((N,K), dtype=int)
D = np.copy(idx)
for k in range(0, N):
d = np.zeros((L, 1))
for t in range(0, M):
d = d + (R[:,t]  Q[k,t])**2
d[k] = np.inf
idx[k] = np.argmin(d)
D[k] = np.amin(d)
return (idx, D)
where
Q0 = np.identity(5)
R0 = np.identity(5)
idxout, Dout = knnsearch(Q0, R0, 1)
This returns different from Matlab:
idx:
[[5]
[1]
[2]
[3]
[4]]
D:
[[0]
[0]
[0]
[0]
[0]]
There is a problem with the row number 9. The second part of the row, the scalar ((R(:,t)Q(k,t)).^2 ), returns the same values for both Matlab and Numpy. Instead, the addition (d + scalar) returns different values. So, the matrix d contains different values in Matlab and Numpy.
Thanks in advance.
