2016-05-11 11 views
0

randiを使用して[1 * 10]次元の2つの配列があります。論理ベクトルと論理2D配列(MATLAB)を使用

a1 = randi(100,1,10); 
a2 = randi(100,1,10); 

今私は2つの以前のアレイのうち最も小さい番号が含まれている第3のアレイを(a3を言う)を作成する必要があります。 私はforループを使用してそれを行うことができますが、論理ベクトルとループを使用しないでどのように解決できますか?

答えて

3

論理ベクトルを使用する必要がありますか?

もしそうでない場合は、min([a1;a2])がこのトリックを行います。それは行列を見て、各列に沿って最小値を見つけます。したがって、2つのベクトルから行列を構築すれば、良い結果が得られます。あなたには、いくつかの理由で、あなたの質問に指定された論理ベクトルと

ハック方法:

smaller_ix = a1 < a2 
v = zeros(1,10); 
v(smaller_ix) = a1(smaller_ix) 
v(~smaller_ix) = a2(~smaller_ix) 
+0

私はそれがすべてでハックだとは思いません。しかし、「分」がより明確でより効率的なルートであるということは間違いありません。 – TroyHaskin

+0

ありがとうUri Merhav。 min([a1; a2])を使用しましたが、新しい配列からの私の値の一部が前の配列と等しく、それらより小さくないことを除いて、かなり良く見えます。しかし、それは本当に良いコードです。 これを試しましたが、 a1 = randi(100,1,10);a2 = randi(100,1,10); x = a1≦a2; a3 = x。* a1; y = find(〜a3); a3(y)= a2(y)。 これは仕事をしているようですが、私は物事を少し簡素化する方法があることを望みます ありがとう。 – Sujal

+0

Sujal、これがあなたの質問に答えられたと感じる場合は、それにフラグを立ててください –

関連する問題