从另一个创建一个数组,找到索引Matlab

时间:2014-02-11 04:07:38

标签: matlab

我有一个包含SSVV等变量的数组。我想只使用V变量创建一个新数组,因此,例如:

V

SV

S

V

变为

V

V

在此之后,我需要知道找到每个V变量的索引,在本例中为索引1和4。

P.S我已尝试在if循环中使用for,如下所示:

for i=1:744;
    if most_common_string{i} == 'V'
        periodo=most_common_string{i};
    end 
end

但是我没有得到所有V的数组。事实上,我只是得到一个细胞。

我还尝试使用find函数来获取索引,但它无效。

2 个答案:

答案 0 :(得分:1)

执行此操作的一种方法是修复for循环。问题是,您始终将值分配给同一个变量。获得那里并不多。您需要添加到数组:

result = {};
indices = [];
for i=1:numel(most_common_string)
    if most_common_string{i} == 'V'
        indices = [indices;i];
        result = [result;most_common_string(i)];
    end
end

请注意,Code Analyzer可能会在循环迭代期间抱怨您的数组更改大小。你不能真正避免这种情况,因为你没有计算出数组的大小。

find可能无法按预期工作,因为它不适合与单元格数组一起使用。

答案 1 :(得分:1)

你不需要第二个数组;你可以使用cellfun。另外,要比较字符串使用strcmp,而不是==(这可能是您的代码无效的原因):

>> array = {'V';'SV';'S';'V'};
>> ind = cellfun(@(s) strcmp(s,'V'), array)

ind =

     1
     0
     0
     1

>> find(ind)

ans =

     1
     4