Coud anyone help me to solve the issue.
1 vue (au cours des 30 derniers jours)
Afficher commentaires plus anciens
I am having a matrix
A=[3.5204 3.7294 3.9112 4.0754 4.2294 4.3787;
0 0 0 0 0 0;
0 0 0 0 0 0;
0 0 0 0 0 0;
0.4337 0.4255 0.4162 0.4065 0.3967 0.3871]
i want to rearrange the matrix in such a way that the sum of (A,1) and sum of (A,2) should not be equal to zero.
Also the number of non zero values present in each row or column can be more than one.
3 commentaires
madhan ravi
le 2 Août 2019
madhan ravi:
A(~sum(A,2),:)=[];
A(:,~sum(A,1))=[]
jaah navi:
I want to have the output in the following manner
A=[3.5204 0 3.9112 0 0 0;
0 0 0 4.0754 0 0.3871;
0 3.7294 0 0 0.3967 0;
0.4337 0 0.4162 0 4.2294 4.3787;
0 0.4255 0 0.4065 0 0]
madhan ravi:
Mind explaining in which logic they are rearranged??
Réponse acceptée
Andrei Bobrov
le 2 Août 2019
Modifié(e) : Andrei Bobrov
le 2 Août 2019
One variant:
[m,n] = size(A);
[~,ii] = sort(rand(m-1,n));
B = A(2:end,:);
An = [A(1,:);B(ii + (m-1)*(0:n-1))];% ATTENTION! If MATLAB < R2016b then use: An = [A(1,:);B(bsxfun(@plus,ii,(m-1)*(0:n-1)))];
jj = mod((1:m)' - (1:n),m) + 1; % for MATLAB < R2016b: jj = mod(bsxfun(@minus,(1:m)',1:n),m) + 1;
jj = jj(:,randperm(n));
out = An(sub2ind([m,n],jj,repmat(1:n,m,1)));
general case:
[m,n] = size(A);
[k,f] = max([m,n]);
p = numel(A);
V = A(randperm(p));
ii = find(V ~= 0, k, 'first');
W = [V(ii),V(setdiff(1:p,ii))];
M = reshape(W,k,[]);
if f == 1
t = n;
else
t = m;
end
MM = M(k*mod((1:t) - (1:k)',t) + (1:k)');% ATTENTION! If MATLAB < R2016b then use: MM = M(k*mod(bsxfun(@minus,1:t,(1:k)'),t) + (1:k)');
out = MM(randperm(k),:);
if f == 2
out = out';
end
8 commentaires
Plus de réponses (0)
Voir également
Catégories
En savoir plus sur Matrix Indexing dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!