Filter löschen
Filter löschen

transforming a 2-dim array integers to 3-dim array of logical which are true for the corresponding number - without using a loop

1 Ansicht (letzte 30 Tage)
Hello,
I would like to take an 2-dim array like
IND=[4 3 2;
1 2 3];
and create a 3-dim of logicals like
GOAL(:,:,1)=[0 0 0 1;
1 0 0 0]
GOAL(:,:,2)=[0 0 1 0;
0 1 0 0]
GOAL(:,:,3)=[0 1 0 0;
0 0 1 0]
So the first second dimension is newly created, it is as long as the highest number in IND and is zero(false), except for the indice, that is 1(true)
I really need it to be fast, so a for loop will not do.
Many thanks Marcus
  2 Kommentare
nobody
nobody am 22 Okt. 2018
Bearbeitet: nobody am 22 Okt. 2018
output = GOAL (logical 2*4*3)
input = IND (integer 2*3)
(I will then use GOAL to get specific values in another 2*4*3 matrix)

Melden Sie sich an, um zu kommentieren.

Akzeptierte Antwort

Bruno Luong
Bruno Luong am 22 Okt. 2018
Bearbeitet: Bruno Luong am 22 Okt. 2018
IND=[4 3 2;
1 2 3];
[I,~,K] = ndgrid(1:size(IND,1),1,1:size(IND,2));
J = IND;
GOAL = accumarray([I(:),J(:),K(:)],1);
  3 Kommentare
nobody
nobody am 22 Okt. 2018
Bearbeitet: nobody am 22 Okt. 2018
Works great, I will try to understand what it does now :D
Thank you very much

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Kategorien

Mehr zu Creating and Concatenating Matrices finden Sie in Help Center und File Exchange

Tags

Community Treasure Hunt

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

Start Hunting!

Translated by