How to slice a two-dimensional array to get a one-dimensional array

5 visualizzazioni (ultimi 30 giorni)
Hi! This seems to be a simple question but I couldn't find its answer after some searching. Let
a = rand(5, 4); i = [2 4 3]; j = [1 2 3];
How do I write a slicing expression to yield the one-dimensional array [a(2, 1), a(4, 2), a(3, 3)]? The expression a(i, j) yields a 3x3 matrix, which is not what I wanted.
Thanks!

Risposte (2)

Donald Liu
Donald Liu il 27 Feb 2018
I just found a solution: a(i + (j-1)*4). Are there better answers?
Thanks!

drummer
drummer il 2 Ott 2020
Well, this is a specific suggestion for this case.
You might implement some sort of loop for bigger cases.
a = rand(5, 4)
i = [2 4 3];
j = [1 2 3];
b = [a(i(1), j(1)) a(i(2), j(2)) a(i(3), j(3))]
So you're basically creating a array b with size (1, 3), calling each element from a by passing the indexes of i and j.
If that works, please accept the answer =)
Cheers.

Community Treasure Hunt

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

Start Hunting!

Translated by