2016-05-18 4 views
0

のような配列を考える:MATLABの与えられたパーセンテージに基づいて2次元配列から要素の数を選択する方法は?

A = [ 1 2 3 4 5 6 7 8 9 10] 
Iが所定の割合に基づいて、アレイから N要素を選択することができ、そして新しい変数 Bに保存したい

。整数でない数の要素が返された場合は、小数点以下を切り捨てたい(すなわち床)。したがって、最後のパーセンテージに関係なく、残りの要素が選択されます。

例:

A = [1 2 3 4 5 6 7 8 9 10 
    0 0 0 0 0 0 0 0 0 0 
    1 1 1 1 1 1 1 1 1 1] % array to choose from 

B = [0.3 0.48 0.22] % represents percentages in decimal form (summing to 1) 

After evaluating the code, I'd like to have result: 
C = [3 4 3] % note length(B) == length(C) 

注:上記のパーセンテージがわずか10素子アレイの3 + 4 = 7を選択した 10 * 0.22 = 2.2が、。したがって、Cの最後の要素がかかります

C(3) = length(A) - [ C(2) + C(1) ] 

私の試み:

私は、これは完全には動作しません知っているが、私はそれを動作させるための方法を見つけ出すように見えることはできません。

これが混乱していた場合はお詫び申し上げます。説明が必要な場合は、お気軽にお問い合わせください。

+0

あなたの試みでは、 'length(A(1))'は 'length(A)'でなければならないと思います。また、%その他の要素%は 'C(i:end-1)'に置き換えることもできます。それ以外の場合は、以下の私のソリューションを参照してください。 – Geoff

答えて

1

どの程度

C = floor(length(A)*B); 
C(end) = length(A)-sum(C(1:end-1)); 

説明:

最初の行は、おそらく最後の要素を除いて、C右のすべての要素を取得します。 2番目のコマンドは、Cの最後の要素を修正します。

例:

>> A = [1 2 3 4 5 6 7 8 9 10 
     0 0 0 0 0 0 0 0 0 0 
     1 1 1 1 1 1 1 1 1 1]; 
>> B = [0.3 0.48 0.22]; 
>> C = floor(length(A)*B); 
>> C(end) = length(A)-sum(C(1:end-1)) 

C = 

3  4  3 

注:Aのための可能な寸法に応じて、length(A) == max(size(A))以来、length(A)を使用して注意する必要があります。 size(A,2)の場合はlength(A)を交換することを検討してください。

関連する問題