How to create a "scatter" matrix without using a for loop?

2 visualizzazioni (ultimi 30 giorni)
I am trying to create a matrix given size, x-coordinate, y-coordinate, and value. Ideally, I would like to avoid using a for loop as I usually work with large data sets.
For example, I have a 4x4 zero matrix.
M = zeros(4)
row = [1,2,3];
col = [2,4,4];
val = [123,321,456];
Is there a function or fast method turn this into:
M = [0 123 0 0;
0 0 0 321;
0 0 0 456;
0 0 0 0]

Risposta accettata

Cris LaPierre
Cris LaPierre il 3 Giu 2023
i think sub2ind will do the trick.
M = zeros(4);
row = [1,2,3];
col = [2,4,4];
val = [123,321,456];
ind = sub2ind(size(M),row,col)
ind = 1×3
5 14 15
M(ind) = val
M = 4×4
0 123 0 0 0 0 0 321 0 0 0 456 0 0 0 0

Più risposte (1)

Steven Lord
Steven Lord il 3 Giu 2023
row = [1,2,3];
col = [2,4,4];
val = [123,321,456];
M = accumarray([row.', col.'], val.', [4 4])
M = 4×4
0 123 0 0 0 0 0 321 0 0 0 456 0 0 0 0

Categorie

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

Community Treasure Hunt

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

Start Hunting!

Translated by