2017-06-28 15 views
-2

私は、以下に示すように、オンライングレーダを通じて提出するコードを書いています。 Bは、任意の/ Kを介してすべての整数1を充填し、いくつかの指定された配列であり、Iは行列Xの対応する論理指数を抽出し、これらの要素の上にいくつかの操作を実行する、戻り配列に置くべきたい:MATLAB - 2つの異なる結果につながる同等の論理インデックス

for i = 1:K 

    A = X(B == i, :); 
    returnArr(i, :) = sum(A)/length(A); 

end 

この全く年生を渡し、私は私のアプローチを変更することが見て、代わりに「検索」機能を使用して第1を介して間接的に配列Xをインデックス、以下のようにしませんでした:

for i = 1:K 

    C = find(B == i); 
    returnArr(i,:) = sum(X(C,:))/length(C); 

end 

驚いたことに、このコードは年生に合格問題なし。私は、グレーダー間に多数のバリエーションがあり、別のものとは異なる機能を扱うかもしれないが、MATLABの機能/コーディングの観点からは、2つのアプローチ間の矛盾について何が分かりませんか?ありがとう!

+1

私の最初の考えは、 '長さ(A)'と '長さ(C)'は 'A'が行列なので異なる結果を返すかもしれないということです。 'A'と' C'のサイズは? – TroyHaskin

+2

[mcve]をご覧ください。あなたは 'B'と' K'について説明し、 'X'をどこからでも引き出す​​。完全な例、期待する結果、実際に得られた結果を提供してください。アプローチは同等ではありません。私はあなたがそれらを見て自分自身のアプローチの違いを説明することができると思います... – excaza

答えて

1

は、私は問題があることだと思う:

length(C) == sum(B == i) 

ながら

つまり
length(A) == max([sum(B == i) , size(X , 2)]) 

は、最初の1と第二の例と同じ結果を得るために、あなたはこのようにそれを変更する必要があります:

A = X(B == i , :); 
returnArr(i, :) = sum(A)/size(A,1); 

lengtを返すlength機能h配列の最大長さ

+0

私はそれが矛盾の原因を突き止めるので、私はこの答えを秒です。また、 'sum' @Davidの使い方にも注意してください。ディメンション引数(秒)を指定しないと、 'sum'は' A'のサイズに応じて異なる動作をします:複数の行→列に対する合計と結果は1行N列のベクトルになります。行と結果の1行→総和はスカラーです。あなたの意図する行動が何であるかはわかりません。 – souty

+0

良い点! Bが一意の値しか持たない場合、コードは機能します。 – Zep

関連する問題