Я должен сравнить содержание двух таблиц, более точно два столбца (один столбец за таблицу), в MATLAB для видения каждого элемента первого столбца, если существует равный элемент во втором столбце.
Я должен использовать для цикла или являюсь там существующей функцией MATLAB, которая делает это?
Если порядок важен, вы выполняете поэлементное сравнение , после чего используете all
%# create two arrays
A = [1,2;1,3;2,5;3,3];
B = [2,2;1,3;1,5;3,3];
%# compare the second column of A and B, and check if the comparison is `true` for all elements
all(A(:,2)==B(:,2))
ans =
1
Если порядок не важен и все элементы уникальны, используйте ismember
all(ismember(A(:,1),B(:,1))
ans =
1
Если порядок не важен и есть повторы, используйте sort
all(sort(A(:,1))==sort(B(:,2)))
ans =
0
знаете ли вы, что можно сделать вот так:
>> a = [1:5];
>> b = [5:-1:1];
>> a == b
ans =
0 0 1 0 0
так вы можете сравнить 2 столбца в matlab, используя оператор == для всего столбца. И вы можете использовать результат как спецификатор индекса для получения равных значений. Например, так:
>> a(a == b)
ans =
3
Это означает, что нужно выбрать все элементы из a, для которых a == b верно.
Например, вы также можете выбрать все элементы из a, которые больше 3:
>> a(a > 3)
ans =
4 5
Используя эти знания, я бы сказал, что вы можете решить свою проблему.
Для арифметических значений работают оба упомянутых решения. Для строк или массивов строк в ячейках используйте strcmp
/strcmpi
.
Из файла справки:
TF = strcmp(C1, C2) сравнивает каждый элемент C1 с таким же элементом в C2, где C1 и C2 - массивы строк с одинаковым размером ячеек. Входные данные C1 или C2 также могут быть символьным массивом с нужным количеством строк. Функция возвращает TF, логический массив, который имеет тот же размер, что и C1 и C2, и содержит логическую 1 (true) для тех элементов C1 и C2, которые совпадают, и логический 0 (false) для тех элементов, которые не совпадают.
Пример (также из файла справки):
Пример 2
Создайте 3 массива ячеек со строками:
A = {'MATLAB','SIMULINK';'Toolboxes','The MathWorks'};
B = {'Handle Graphics','Real Time Workshop';'Toolboxes','The MathWorks'};
C = {'handle graphics','Signal Processing';' Toolboxes', 'The MATHWORKS'};
Сравните массивы ячеек A и B с учетом регистра:
strcmp(A, B)
ans =
0 0
1 1
Сравните массивы ячеек B и C без учета регистра. Обратите внимание, что 'Toolboxes' не совпадает из-за ведущих символов пробела в C{2,1}, которые не встречаются в B{2,1}:
strcmpi(B, C)
ans =
1 0
0 1
Чтобы получить одно возвращаемое значение, а не массив логических значений, используйте функцию all
, как объяснил Джонас.