how to use index referencing ?
조회 수: 1 (최근 30일)
이전 댓글 표시
I have A =
[1 -2 1 0.7 3
1 -0.1 -3 2 -0.2
0 0 1 1 -2 ]
I want to choose the most negative of each column, and drop the rest. If a column doesn't have negative values then it is zero. Thus, the above matrix will be
A =
[ 0 -2 0 0 0
0 0 -3 0 0
0 0 0 0 -2 ]
Also, I want to keep the values of the same index in the x matrix.
x =
[ 440 680 520 240 730
440 680 520 240 730
440 680 520 240 730 ]
. Thus, x will be
x =
[ 0 680 0 0 0
0 0 520 0 0
0 0 0 0 730 ]
Thanks for your quick responses,
댓글 수: 0
답변 (2개)
Jos (10584)
2014년 2월 27일
Assuming A and X are your input arrays
szA = size(A)
B = zeros(szA)
[minA,Rix] = min(A,[],1) % minimum value per column, and the row index
LinIDX = sub2ind(size(A), Rix, 1:szA(2))
B(LinIDX) = minA
B = min(B,0) % for cases when all elements in a column of A are positive
X2 = (B<0) .* X
댓글 수: 2
Jos (10584)
2014년 2월 27일
The result is stored in variable B not in A. Each column of B holds a single value, namely the minimum value in that column of A, as you requested. If you want to have it stored in A, you can always execute:
A = B
Sean de Wolski
2014년 2월 27일
A = [1 -2 1 0.7 3
1 -0.1 -3 2 -0.2
0 0 1 1 -2 ];
x = rand(size(A));
B = bsxfun(@times,bsxfun(@eq,A,min(A,[],1)),min(A,0));
x(B==0) = 0;
댓글 수: 0
참고 항목
카테고리
Help Center 및 File Exchange에서 Matrices and Arrays에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!