考虑两个向量:
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
问题:
答案 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>