1

2つのベクトルを考えてみましょう。

 v= [1 2 3 4 5 6 7]

 a=['a' 'b' 'c' 'a' 'a' 'a' 'd']

aの対応するエントリが'a'であるvのすべてのエントリの平均を求めたい。

つまり、test = mean(1,3,4,5)

私はエントリをキャッチするためにこれを開始するためにこれを試しました:

for i=1:7
 if abs(char(a(i))-char(c))==0;
   test(i)=v(i);
 end
end

テスト

test =      1     0     0     4     5     6  

問題:

  1. 見つからないエントリには0を割り当てています
  2. 前期は考慮していません
4

1 に答える 1

1

ismember次の関数を使用してみてください。

>> help ismember
 ismember True for set member.
    ismember(A,S) for the array A returns an array of the same size as A
    containing 1 where the elements of A are in the set S and 0 otherwise.
    A and S can be cell arrays of strings.

ismemberベクトルを論理配列として形成し、testベクトル内で文字「a」が見つかった場合は1を割り当て、そうでない場合は0を割り当てます。

>> ismember(a, 'a')

ans =

 1     0     0     1     1     1     0

次に、これを論理インデックスとして使用して、ベクトルから対応するエントリを抽出できvます。

>> v(ismember(a, 'a'))

ans =

     1     4     5     6

最後に、このベクトルの平均を取ることができます:

>> mean(v(ismember(a, 'a')))

ans =

  4

編集 私はあなたの場合、比較演算子を使用して、はるかに簡単な方法で実際に論理配列を形成できることに気づきました。

>> a == 'a'

ans =

     1     0     0     1     1     1     0

したがって、コードの最終行は次のようになります。

>> mean(v(a == 'a'))

ans =

     4

ismember複数の文字の存在をテストする場合、たとえば、「a」または「b」があった場所を検索する場合に便利です。

于 2012-04-09T07:25:15.540 に答える