Linear Problem Matrix without For Loop
Mostrar comentarios más antiguos
Hello all, I have a problem. Suppose I have a matrix like this:
K= [1 2 4 3 4 6 ]
And I want to end with a matrix like this
L=[1 0 0 0 0 ; 0 1 0 0 0 ; 0 0 0 1 0 ; 0 0 1 0 0 ; 0 0 0 1 0 ; 0 0 0 0 1]
As you can see the number of columns is the size of unique(K) and row is the length(K) How can I create a matrix like L WITHOUT using for.? I tried ind2sub but I failed.* * * * Maybe a solution could be to have a matrix like this
U= [1 2 4 3 4 5 ; 1 2 4 3 4 6]
where the first row is the index. Thank you all!!
1 comentario
Guillaume
el 22 de En. de 2015
The number of columns is the max of K not the size of unique(K)
Respuesta aceptada
Más respuestas (2)
K = [1 2 4 3 4 6 ];
L = zeros(numel(K), max(K));
L(sub2ind(size(L), 1:numel(K), K)) = 1
or using sparse matrices:
L = full(sparse(1:numel(K), K, 1))
or using accumarray:
L = accumarray([1:numel(K); K]', ones(numel(K), 1))
1 comentario
John D'Errico
el 22 de En. de 2015
Those would have been my solutions, preferring either sparse or accumarray, depending on whether the result is desired to be full or sparse in the end.
John D'Errico
el 22 de En. de 2015
0 votos
Time to learn how to use sparse.
Or, if you prefer to work with full matrices, learn to use accumarray.
Or, if those options are not to your liking, learn to use use subsindx. That will take slightly more effort though.
Categorías
Más información sobre Sparse Matrices en Centro de ayuda y File Exchange.
Productos
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!