1

考虑两个向量:

 v= [1 2 3 4 5 6 7]

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

我想找到 v 中所有条目的平均值,它们在 a 中的对应条目是'a';

即测试=平均值(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.

ismembertest向量形成为逻辑数组,在向量中找到字符“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 回答