MATLAB在包含两个变量的元胞数组中查找行

问题描述 投票:1回答:2

我正在尝试在单元格数组中查找包含(例如)值6和字符串Steel的行(请参阅问题底部的矩阵C)。我了解我可以使用以下内容:

>> find(strcmp(C, 'Steel'))

ans =

    11
    14
    17

这给了我一般索引,如果我减去9(矩阵的长度),我得到的行2, 5, 8。大。并找到值6:

>> find([C{:}] == 6)

ans =

     1     2     3

超级。我知道如何组合这些信息以找到第二行吗?我想本质上提取值C {2,3}。我得到了值(6)和材料(钢),从上面我知道要看第二行。但是我如何自动通过呢?

C = {6, 'Concrete',  0.37,   0.33;
     6, 'Steel',     0.1,    0.1;
     6, 'Lead',      0.057,  0.057;
     10, 'Concrete', 0.41,   0.37;
     10, 'Steel',    0.11,   0.11;
     10, 'Lead',     0.057,  0.057;
     15, 'Concrete', 0.44,   0.41;
     15, 'Steel',    0.11,   0.11;
     15, 'Lead',     0.057,  0.057};
matlab find cell
2个回答
3
投票

首先,我将在第一列中找到带有6的索引:

index1 = find(cell2mat(cellfun(@(x) isequal(x, 6), C(:,1), 'UniformOutput', 0)));

现在,第二列的索引为'Steel':

index2 = find(cell2mat(cellfun(@(x) strcmp(x,'Steel'), C(:,2), 'UniformOutput', 0)));

最后,他们的交集:

index = intersect(index1, index2);

所以C(index, :)是您想要的行。

请注意,如果更多行将满足这两个条件,则index将是一个向量,C(index, :)将是一个n x 4单元格数组。


0
投票

您知道物料始终在第二列中,而编号始终在第一列中吗?如果是这样,请使用此信息并仅在以下列中进行搜索:rows_six=cell2mat(C(:,1))rows_steel=strcmpi(C(:,2),'steel')。要获得带有6和钢的行,请使用C(rows_six&rows_steel,:)

© www.soinside.com 2019 - 2024. All rights reserved.