Knowee
Questions
Features
Study Tools

#<GRADED> def findknn(xTr,xTe,k): """ function [indices,dists]=findknn(xTr,xTe,k); Finds the k nearest neighbors of xTe in xTr. Input: xTr = nxd input matrix with n row-vectors of dimensionality d xTe = mxd input matrix with m row-vectors of dimensionality d k = number of nearest neighbors to be found Output: indices = kxm matrix, where indices(i,j) is the i^th nearest neighbor of xTe(j,:) dists = Euclidean distances to the respective nearest neighbors """ # Enter your code here n,d = xTr.shape m,d = xTe.shape tempDists = l2distance(xTr,xTe); indices=np.argsort(tempDists,axis=0)[:k]; dists=tempDists[indices,np.arange(tempDists.shape[1])[None, :]]; raise NotImplementedError('Your code goes here!') return indices, dists # until here #</GRADED> using python and without using for loop

Question

#<GRADED> def findknn(xTr,xTe,k): """ function [indices,dists]=findknn(xTr,xTe,k);

Finds the k nearest neighbors of xTe in xTr.

Input:
xTr = nxd input matrix with n row-vectors of dimensionality d
xTe = mxd input matrix with m row-vectors of dimensionality d
k = number of nearest neighbors to be found

Output:
indices = kxm matrix, where indices(i,j) is the i^th nearest neighbor of xTe(j,:)
dists = Euclidean distances to the respective nearest neighbors
&quot;&quot;&quot;
# Enter your code here
n,d = xTr.shape
m,d = xTe.shape
tempDists = l2distance(xTr,xTe);
indices=np.argsort(tempDists,axis=0)[:k];
dists=tempDists[indices,np.arange(tempDists.shape[1])[None, :]];
raise NotImplementedError('Your code goes here!')

return indices, dists
# until here

#</GRADED> using python and without using for loop

...expand
🧐 Not the exact question you are looking for?Go ask a question

Solution

Sure, here's how you can implement the findknn function without using a for loop:

import numpy as np

def findknn(xTr, xTe, k):
    # Compute the Euclidean distances between xTr and xTe
    dists = np.sqrt(np.sum((xTr[:, np.newaxis] - xTe)**2, axis=2))

    # Get the indices of the k nearest neighbors for each test point
    indices = np.argsort(dists, axis=0)[:k]

    # Get the distances of the k nearest neighbors
    dists = np.sort(dists, axis=0)[:k]

    return indices, dists

In this implementation, we first compute the Euclidean distances between xTr and xTe using numpy's broadcasting and vectorized operations.

Next, we use np.argsort to get the indices of the k nearest neighbors for each test point. These indices represent the positions of the nearest neighbors in the xTr array.

Finally, we use np.sort to get the distances of the k nearest neighbors for each test point. These distances are sorted in ascending order.

This implementation avoids using a for loop by taking advantage of numpy's broadcasting and vectorized operations, making it more efficient and easier to understand.

This problem has been solved

Similar Questions

0/0

Upgrade your grade with Knowee

Get personalized homework help. Review tough concepts in more detail, or go deeper into your topic by exploring other relevant questions.