replace values in columns of a matrix

5 ビュー (過去 30 日間)
Christopher
Christopher 2014 年 11 月 22 日
コメント済み: Christopher 2014 年 11 月 22 日
I have a matrix of random numbers, with some repeating. For example:
OV =
29.5 -29.3 82.2 -49.1
12.6 -62.2 82.2 -72.8
114.8 -29.3 -6.9 156
29.5 -97.1 -42.5 71.1
-63.8 119 33.3 -49.1
I want to do some columnwise operations based on the values of the first row. So far I have
idxo = bsxfun(@ne,OV,OV(1,:))*2.5; % =0 for OV(1,:)=OV and 2.5 otherwise
idxo(sec_ovec<0) = 1; % for OV<0, =1
which gives me a new matrix idxo as follows:
0 1 0 1
2.5 1 0 1
2.5 1 1 2.5
0 1 1 2.5
1 2.5 2.5 1
The last thing I need is to, for all OV rows which have a negative number in the first row: make all corresponding idxo values =0 if OV is negative, and =1 otherwise.
I can do this, but my solution is inefficient. What is a fast way to do this? Speed is important because it is a big bottleneck in my code.
The end result should modify column 2 and 4 to give
idxo =
0 0 0 0
2.5 0 0 0
2.5 0 1 1
0 0 1 1
1 1 2.5 0

採用された回答

Matt J
Matt J 2014 年 11 月 22 日
編集済み: Matt J 2014 年 11 月 22 日
j=OV(1,:)<0;
idxo(:,j)=OV(:,j)>=0;
  1 件のコメント
Christopher
Christopher 2014 年 11 月 22 日
Excellent solution, thanks!

サインインしてコメントする。

その他の回答 (0 件)

カテゴリ

Help Center および File ExchangeLogical についてさらに検索

製品

Community Treasure Hunt

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

Start Hunting!

Translated by