2014-12-05 2 views
0

У меня есть матрица X и A, где X = [x1, y1, 1, 1; x2, y2, 1, 3; x3, y, 2, 4] A = [1, 1, 0; 1, 3, 1; 1, 4, 2]MATLAB: сканирование строки матрицы и использование значений для поиска другой матрицы

Я хочу: 1. сканирования последние два столбца для каждой строки в X (FYI, эти две комбинации чисел являются уникальными) 2. найти эти значения в первых двух столбцах A 3. Получите значение последнего столбца в этой строке A.

Например, для первой строки X я получаю 1 и 1, поэтому я нахожу 1 и 1 для первых двух столбцов в A (который является первой строкой), поэтому число, которое я хочу получить, равно 0.

Я думаю, что могу сделать это, используя цикл и функцию «найти», если бы это был только один номер, с которым я работаю, но я новичок в Matlab и имею проблемы с сочетание двух чисел. Буду признателен за вашу помощь!

ответ

1

Функция ismember может быть тем, что вы ищете, а также операторы () и : для извлечения столбцов из массива.

% Map rows in X to rows in A 
[tf,loc] = ismember(X(:,[3 4]), A(:,[1 2]), 'rows'); 
% Grab the corresponding value from A 
rslt = A(loc, 3); 

Теперь у Вас есть логический вектор tf, который указывает для каждой строки в X, был ли он найден в А, а loc, который содержит соответствующие индексы в строкам А для тех, которые соответствовали. Затем вы используете эти индексы для индексации в A, чтобы вывести столбцы «значение» или зависимые переменные. Это векторизованные операции, поэтому это будет быстрее, чем выполнение с циклами и find().

Прочитайте документацию для ismember, unique, paren и функции, которые они ссылаются, чтобы получить больше фона на функции MatLab для ведения recordwise поиска, как это.

+0

Это хорошо работает, спасибо! – aggie07

Смежные вопросы