Azzera filtri
Azzera filtri

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

1 visualizzazione (ultimi 30 giorni)
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

Risposta accettata

Bruno Luong
Bruno Luong il 22 Ott 2018
Modificato: Bruno Luong il 22 Ott 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 Commenti
nobody
nobody il 22 Ott 2018
Modificato: nobody il 22 Ott 2018
Works great, I will try to understand what it does now :D
Thank you very much

Accedi per commentare.

Più risposte (0)

Categorie

Scopri di più su Creating and Concatenating Matrices in Help Center e File Exchange

Tag

Community Treasure Hunt

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

Start Hunting!

Translated by