Lo que pasa una matriz de indicadores de este tipo, es que es mejor si se hace escasa. Casi siempre harás una matriz multiplicada con ella de todos modos, así que haz que la multiplicación sea eficiente.
n = 4;
V = [3;2;1;4];
M = sparse(V,1:n,1,n,n);
M =
(3,1) 1
(2,2) 1
(1,3) 1
(4,4) 1
Si insiste en que M es una matriz completa, a continuación, por lo que es por lo que es sencillo después de los hechos, mediante el uso de la plena.
full(M)
ans =
0 0 1 0
0 1 0 0
1 0 0 0
0 0 0 1
Aprende a usar matrices dispersas. Ganarás mucho al hacerlo. Es cierto que para una matriz de 4x4, dispersa no ganará mucho. Pero los casos de ejemplo nunca son su verdadero problema. Supongamos que n fuera realmente 2000?
n = 2000;
V = randperm(n);
M = sparse(V,1:n,1,n,n);
FM = full(M);
whos FM M
Name Size Bytes Class Attributes
FM 2000x2000 32000000 double
M 2000x2000 48008 double sparse
Las matrices dispersas no ganan solo en términos de memoria utilizada. Compare el tiempo requerido para una sola matriz multiplicada.
A = magic(2000);
tic,B = A*M;toc
Elapsed time is 0.012803 seconds.
tic,B = A*FM;toc
Elapsed time is 0.560671 seconds.
¿me puede explicar la tercera línea de su código? – Tarun