我正在尝试在单元格数组中查找包含(例如)值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};
首先,我将在第一列中找到带有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
单元格数组。
您知道物料始终在第二列中,而编号始终在第一列中吗?如果是这样,请使用此信息并仅在以下列中进行搜索:rows_six=cell2mat(C(:,1))
和rows_steel=strcmpi(C(:,2),'steel')
。要获得带有6和钢的行,请使用C(rows_six&rows_steel,:)