Tranform Python code in Matlab

3 views (last 30 days)
Example Mo
Example Mo on 20 Jun 2015
Commented: Example Mo on 21 Jun 2015
Hello, I'm new to Matlab and I want to transform a simple python code.I tried to do that alone but I don't know how to make array indexation, in this case X[pairs[:,0],:] . Here is my code:
def learning_distance_symmetric(W,X,pairs,batch_size=10000):
"""Compute an array of Euclidean distances between points indexed by pairs
To make it memory-efficient, we compute the array in several batches.
Parameters
----------
X : array, shape (n_samples, n_features)
Data matrix
W : array, shape (n_features,n_features)
Learned distance matrix
pairs : array, shape (n_pairs, 2)
Pair indices
batch_size : int
Batch size (the smaller, the slower but less memory intensive)
Output
------
dist : array, shape (n_pairs,)
The array of distances
"""
n_pairs = pairs.shape[0]
dist = np.ones((n_pairs,), dtype=np.dtype("float32"))
for a in range(0, n_pairs, batch_size):
b = min(a + batch_size, n_pairs)
diff = X[pairs[:,0],:] - X[pairs[:,1],:]
dist[a:b] = np.sum(np.dot(W,diff.T)*diff.T, axis=0)
return dist
Someone could give me some clues (Maybe the documentation dealing with this case) ? Thanks in advance.

Answers (1)

Ken Atwell
Ken Atwell on 21 Jun 2015
MATLAB is 1-indexed, so I think you're looking for something like:
diff = X(pairs(:,1),:) - X(pairs(:,2),:);
  1 Comment
Example Mo
Example Mo on 21 Jun 2015
Thanks, it was exactly what I'm looking for.

Sign in to comment.

Tags

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!