# Problem with indexing within a vector

조회 수: 3(최근 30일)
K E 13 Mar 2013
I have two vectors, x and y. I would like to make third vector, z, which has the combined magnitude of x and y, i.e. sqrt(x.^2 + y.^2) but has the sign of whichever of x and y has the bigger individual magnitude. If the example below, z should be [-10.20 5.39 10.77 -10.44]. However I am incorrectly indexing the matrix bothVectorsTogether, so that it returns a 4x4 matrix instead of a 4x1 vector. What is the right way to index it? The "real" x and y have 950000 elements so I want to avoid looping through each row to identify the sign.
% Initialize example vectors
x = [-10 5 4 -10]';
y = [2 -2 10 -3]';
zMagnitude = sqrt(x.^2 + y.^2); % Size 4x1
% Find which has a bigger individual magnitude, x or y
[~, whichIsBigger] = max(abs([x y])'); % 1 if x is bigger, 2 if y is bigger
bothVectorsTogether = [x y];
zSign = sign(bothVectorsTogether(:, whichIsBigger)); % Size 4x4 not 4x1
z = zMagnitude.*zSign;

댓글을 달려면 로그인하십시오.

### 채택된 답변

Azzi Abdelmalek 13 Mar 2013
편집: Azzi Abdelmalek 13 Mar 2013
x = [-10 5 4 -10]';
y = [2 -2 10 -3]';
idx=abs(x)>abs(y);
s=y;
s(idx)=x(idx);
z=sqrt(x.^2 + y.^2).*sign(s)
##### 댓글 수: 1표시숨기기 없음
K E 13 Mar 2013
Works perfectly, thanks!

댓글을 달려면 로그인하십시오.

### Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by