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
추가 답변 (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!