仅查找所选条目的平均值

时间:2012-04-09 07:22:24

标签: matlab mean

考虑两个向量:

 v= [1 2 3 4 5 6 7]

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

我想找到v中所有条目的平均值,其中a中的相应条目是'a';

即。 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. 不考虑上一学期

1 个答案:

答案 0 :(得分: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向量形成为逻辑数组,指定1在向量中找到字符“a”,将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'所在的位置。< / p>