Сравнение содержания двух столбцов в MATLAB

Я должен сравнить содержание двух таблиц, более точно два столбца (один столбец за таблицу), в MATLAB для видения каждого элемента первого столбца, если существует равный элемент во втором столбце.

Я должен использовать для цикла или являюсь там существующей функцией MATLAB, которая делает это?

5
задан random 21 August 2011 в 16:31
поделиться

3 ответа

Если порядок важен, вы выполняете поэлементное сравнение , после чего используете 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
8
ответ дан 14 December 2019 в 01:03
поделиться

знаете ли вы, что можно сделать вот так:

>> 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

Используя эти знания, я бы сказал, что вы можете решить свою проблему.

2
ответ дан 14 December 2019 в 01:03
поделиться

Для арифметических значений работают оба упомянутых решения. Для строк или массивов строк в ячейках используйте 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, как объяснил Джонас.

1
ответ дан 14 December 2019 в 01:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: