Python zip function in Matlab

Solution for Python zip function in Matlab
is Given Below:

I have some Python code that I would like to run in Matlab. Suppose you have two lists of the same length:

    x = [0, 2, 2, 5, 8, 10]
    y = [0,2, 4, 7, 3, 3]

    P = np.copy(y)
    P.sort()
    P = np.unique(P, axis=0) # P = [0 2 3 4 7]  Takes the list y, sorts it and removes repeated elements

    s = list(zip(x,y))  #match list x with y: s = [(0, 0), (2, 2), (2, 4), (5, 7), (8, 3), (10, 3)]

    for y_1,y_2 in zip(P,P[1:]):  # runs over (0, 2), (2, 3), (3, 4), (4, 7)
        for v_1,v_2 in zip(s, s[1:]):
                -- process --

Where in this case:

list(zip(s, s[1:])) = [((0, 0), (2, 2)), ((2, 2), (2, 4)), ((2, 4), (5, 7)), ((5, 7), (8, 3)), ((8, 3), (10, 3))]

I would like to translate this in Matlab but I don’t know how to replicate the zip function. Any ideas on how I can do this?

MATLAB doesn’t have a zip, but you can accomplish the same thing in various ways. I think that the simplest translation of


for y_1,y_2 in zip(P,P[1:]):
   ...

is

for ii = 1:numel(P)-1
   y_1 = P(ii);
   y_2 = P(ii+1);
   ...

And in general, iterating over zip(x,y) is accomplished by iterating over indices 1:numel(x), then using the loop index to index into the arrays x and y.

Here’s an implementation of Python’s zip function in Matlab.

function out = zip(varargin)
% Emulate Python's zip() function.
%
% Don't actually use this! It will be slow. Matlab code works differently.
args = varargin;
nArgs = numel(args);
n = numel(args{1});
out = cell(1, n);
for i = 1:n
    blah = cell(1, nArgs);
    for j = 1:nArgs
        if iscell(args{j})
            blah(j) = args{j}(i);
        else
            blah{j} = args{j}(i);
        end
    end
    out{i} = blah;
end
end

But don’t use it; the performance will be lousy. In Matlab, you want to keep things in parallel primitive arrays instead, and use vectorized operations on those. Or, if you have to, iterate over array indexes.