MATLAB Найти строку в сотовом массиве, содержащем две переменные - PullRequest
1 голос
/ 18 октября 2019

Я пытаюсь найти строку в массиве ячеек, которая содержит (например) значение 6 и строку Steel (см. Матрицу C внизу вопроса). Я понимаю, что могу использовать следующее:

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

ans =

    11
    14
    17

Что дает мне общий индекс, если вычесть 9 (длина матрицы), я получу строки 2, 5, 8. Отлично. И найти значение 6:

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

ans =

     1     2     3

Super. Есть идеи, как мне прочесать эту информацию, чтобы найти второй ряд? Я хотел бы извлечь значение 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};

Ответы [ 2 ]

3 голосов
/ 19 октября 2019

Сначала я найду индексы с 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 массивом ячеек.

1 голос
/ 19 октября 2019

Знаете ли вы, что материал всегда находится во втором столбце, а номер всегда в первом? Если это так, используйте эту информацию и ищите только в следующих столбцах: rows_six=cell2mat(C(:,1)) и rows_steel=strcmpi(C(:,2),'steel'). Чтобы получить ряды с 6 и сталью, используйте C(rows_six&rows_steel,:)

...