reshuffle a symmetric matrix

4 visualizzazioni (ultimi 30 giorni)
Muhammad Shafique
Muhammad Shafique il 13 Giu 2011
Hi all, I have a large symmetric matrix (600*600)and need to reshuffle the elements randomly while keeping the matrix symmetric.
Could anyone help? I shall be grateful.
Regards, Shafique

Risposta accettata

Andrei Bobrov
Andrei Bobrov il 13 Giu 2011
1.
sz = size(A);
B = zeros(sz);
vtl = nonzeros(tril(reshape(1:numel(A),sz)));
B(tril(true(sz))) = A(vtl( randperm(length(vtl))));
B = B + tril(B,-1).';
2. More variant - don't modify main diagonal
sz = size(A);
B = diag(diag(A));
vtl = nonzeros(tril(reshape(1:numel(A),sz),-1));
B(tril(true(sz),-1)) = A(vtl( randperm(length(vtl))));
B = B + tril(B,-1).';
3. OR main diagonal - zeros (modify last row of the previous cod)
B = B + tril(B,-1).'
  4 Commenti
Muhammad Shafique
Muhammad Shafique il 13 Giu 2011
Hi Andrei. I needed to reshuffle the elements only within a triangle but excluding the diagonal. The variant you added does exactly that. Thanks a lot.
Andrei Bobrov
Andrei Bobrov il 13 Giu 2011
Muhhammad! Point 2.

Accedi per commentare.

Più risposte (0)

Categorie

Scopri di più su Computational Geometry 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