Coud anyone help me to solve the issue.
1 回表示 (過去 30 日間)
古いコメントを表示
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 件のコメント
madhan ravi
2019 年 8 月 2 日
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??
採用された回答
Andrei Bobrov
2019 年 8 月 2 日
編集済み: Andrei Bobrov
2019 年 8 月 2 日
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 件のコメント
その他の回答 (0 件)
参考
カテゴリ
Help Center および File Exchange で Matrix Indexing についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!