私は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」ループを使用しました。ありがとう
a .* sign(b)
b
ゼロ要素がない場合に機能し、a
任意の要素を持つことができます。
説明:
a
の記号でアイテムごとに乗算しb
ます。
ヌル修正:
null エラーを修正するには、次のように自分で関数を記述できます (疑似コード):
function r = test_sign(b)
if b==0
r = 1;
else
r = sign(b);
end
論理インデックスを使用できます。
(最初に、同じ長さであると仮定a
しb
ます。そうしないと、あなたの質問は意味がありません)。
が負の場合とTRUE
そうでない場合のベクトルを取得するには、次のようにします。b
FALSE
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
場合ループが発生しますが、回避できます。この種のマトリックス インデックスについては、こちらを参照してください。