How can I index a matrix using an array?

3 visualizaciones (últimos 30 días)
Yizhuang Alden Cheng
Yizhuang Alden Cheng el 31 de Jul. de 2019
Editada: Yizhuang Alden Cheng el 31 de Jul. de 2019
Hi,
I want to create a very large logical matrix, and I have an array which has the indices of the matrix which I want to be true (with the remaining entries being false).
For example, suppose I had the following array 8x2 array:
idx = [1 1;
1 2;
3 1;
3 3;
4 2;
5 1;
5 2;
5 3];
where each row represents index for a 5x3 matrix, and I want to use this array to create the following index:
A = [1 1 0;
0 0 0;
1 0 1;
0 1 0;
1 1 1];
Is there an efficient way to do this without using loops (since in my actual application, A may have something like 1,000,000 rows and 10,000 columns)? Thanks!

Respuesta aceptada

madhan ravi
madhan ravi el 31 de Jul. de 2019
A = accumarray(idx,1,[],[],0)
  2 comentarios
Alex Mcaulley
Alex Mcaulley el 31 de Jul. de 2019
nice solution +1
Yizhuang Alden Cheng
Yizhuang Alden Cheng el 31 de Jul. de 2019
Thank you! I had to turn this into a logical matrix after using this code, but nonetheless this a very elegant answer.

Iniciar sesión para comentar.

Más respuestas (1)

Andrei Bobrov
Andrei Bobrov el 31 de Jul. de 2019
s = max(idx);
A = false(s);
A(sub2ind(s,idx(:,1),idx(:,2))) = true;
  1 comentario
Yizhuang Alden Cheng
Yizhuang Alden Cheng el 31 de Jul. de 2019
Editada: Yizhuang Alden Cheng el 31 de Jul. de 2019
Thank you! This works very well, and is in fact faster. I would have accepted this as well if I could accept multiple answers.

Iniciar sesión para comentar.

Categorías

Más información sobre Creating and Concatenating Matrices en Help Center y File Exchange.

Etiquetas

Community Treasure Hunt

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

Start Hunting!

Translated by