0

私はmatlabに2つの配列を持っています

a = [1 1.1 1.2 1.1 1.3] 
b = [-2 0 1 2 -4]

array の負の値、たとえば -2 -4 については、arrayを負の -1 および -1.3bに変換したいと思います。a

これを達成するためのより迅速な方法を探して、700 000 列 (おそらく数時間) には時間がかかりすぎる「for」ループを使用しました。ありがとう

4

2 に答える 2

2

a .* sign(b)bゼロ要素がない場合に機能し、a任意の要素を持つことができます。

説明:

aの記号でアイテムごとに乗算しbます。

ヌル修正:

null エラーを修正するには、次のように自分で関数を記述できます (疑似コード):

function r = test_sign(b)
if b==0
   r = 1;
else
   r = sign(b);
end
于 2012-04-14T00:02:26.810 に答える
1

論理インデックスを使用できます。

(最初に、同じ長さであると仮定abます。そうしないと、あなたの質問は意味がありません)。

が負の場合とTRUEそうでない場合のベクトルを取得するには、次のようにします。bFALSE

b < 0 % depending on what you want, b <= 0

これをインデックスとして使用して、a対応する要素を取得できます。

a( b < 0 )

正しい要素を選択したので、それらを負にして、元に戻します。

a ( b < 0 ) = - a ( b < 0 );

b < 0効率の観点から、再計算を避けるためにベクトルを保存することをお勧めします (どちらが好みかを試して確認する必要があります)。

idx = b < 0;
a(idx) = -a(idx);

Matlab はベクトル化された言語であるため、ほとんどのfor場合ループが発生しますが、回避できます。この種のマトリックス インデックスについては、こちらを参照してください。

于 2012-04-14T00:01:57.810 に答える