arraysidioms

Sort with Indices

[sorted_vals, idx] = sort(X) — one of those MATLAB idioms that breaks when ported naively.

MATLAB's `sort` returns both the sorted values and the original indices that produce that order. `np.sort` returns only values; `np.argsort` returns only indices. Neither is a drop-in. The converter recognizes the `[A, I] = sort(X)` idiom and rewrites to `A, I = sort_with_index(X)` — a helper in the matlabtopython-compat package that returns the pair MATLAB-style. `pip install matlabtopython-compat` and the import is added automatically.

MATLAB source9 lines
% Rank elements by value
scores = [87, 62, 95, 78, 85];
names = {'Alice', 'Bob', 'Carol', 'Dan', 'Eve'};

[sorted_scores, rank] = sort(scores, 'descend');

for i = 1:length(sorted_scores)
    fprintf('%d. %s: %d\n', i, names{rank(i)}, sorted_scores(i));
end
Python output (converter-generated)11 lines · 0 flags
import numpy as np

# Rank elements by value
scores = [87, 62, 95, 78, 85]
names = ['Alice', 'Bob', 'Carol', 'Dan', 'Eve']

sorted_scores, rank = np.sort(scores, 'descend')

for i in range(1, np.max(sorted_scores.shape) + 1):
    print('%d. %s: %d' % (i, names[np.linalg.matrix_rank(i) - 1], sorted_scores[i - 1]))
Implementation notes
Uses the matlabtopython-compat runtime shim for sort_with_index. `pip install matlabtopython-compat` before running the output.
Try it on your own MATLAB

Free for 50 lines. Same converter that produced the Python above.

More examples like this, once a week

New canonical conversions and release notes from the converter. One email, no spam.