2016-05-22 11 views
0

私は20 * 120のマトリックスを持っています。行列の各列について、すべての値の間で最大値を見つけて残りの値を合計する必要があります。次に、最大値を残りの値の合計で除算する必要があります。私は次のコードを試しましたが、結果は正しくありませんでした。何が問題ですか?次のコードにはどのような誤りがありますか?

は、次のように私たちは例の行列mを持って言う:代わりに答えるの

s = 1:z  %z=120 
for i = 1:x  %x=20 
    maximss = max(Pres_W);  %maximum value 
    InterFss = (sum(Pres_W))-maximss;  %remaining values 
    SIRk(:,s) = (maximss(:,s))./(InterFss(:,s)); 
end 
+0

これは有効なMATLABコードではありません。また、 'Pres_W'について何を知っていますか?繰り返すことができますか? [mcve]を入力してください。 –

+1

@ Dev-iL、これは有効なMATLABコードです。 –

+0

@StewieGriffinほとんど、しかしそれほどではありません。 'for'キーワードがありません。正直なコピー貼りの間違いかもしれませんが、私はOPがアップロードするものに注意を払うことを本当に欲しいです。このような理由から私はそれを修正しなかった。 –

答えて

2

「間違っているものを」、私が最初にこの行われるべきかを説明するソリューションを提供します

m =  
    8 5 9 14 10 7 5 
    10 8 12 11 9 9 12 
    10 3 7 7 8 4 6 
    13 11 6 15 13 11 9 

各列の最大値を求める:

col_max = max(m, [], 1) 
col_max =  
    13 11 12 15 13 11 12 

合計各列のすべての要素、および最大値substract:

col_max ./ col_sum 
ans =  
    0.46429 0.68750 0.54545 0.46875 0.48148 0.55000 0.60000 

あるいは、ワンライナーとして:

他の要素の和によって

col_sum = sum(m, 1) - col_max 
col_sum =  
    28 16 22 32 27 20 20 

分割最大値をところで

max(m,[],1)./(sum(m,1)-max(m,[],1)) 
ans = 
    0.46429 0.68750 0.54545 0.46875 0.48148 0.55000 0.60000 

:あなたのコードは、あなたが説明している正確に何を行い、それは格言を返します。 um値を最大値を除くすべての値で割ったものです。ベストプラクティスに関する


注:このような

ベクタライズもの、ループの必要はありません。

max(m, [], 1)は、2Dアレイの場合、max(m)と同じです。ただし、何らかの理由で行列に1行しかない場合は、行の最大値、つまり1つの数値が返されます。

sum(m,1)は、2Dアレイの場合はsum(m)と同じです。しかし、何らかの理由で行列に行が1つしかない場合は、行の合計、つまり単一の数値が返されます。

関連する問題