2013-05-02 5 views
0

У меня есть матрица и вектор, и я хочу сравнить каждый столбец матрицы с вектором - то, что я хочу получить, - это номер столбца, который равен вектору. Пример:Octave - сравнить столбцы матрицы с вектором

matrix M=1 1 0 1 
     1 0 0 0 
     0 1 1 0 

vector v= 1 0 1 

результат должен быть 2 (так как второй столбец М равен вектор V)

Как сделать это?

ответ

1
octave> M = [1 1 0 1; 1 0 0 0; 0 1 1 0]; 
octave> v = [1 0 1]; 
octave> sum(M == repmat(v', 1, 4)) 
ans = 

    1 3 2 2 

octave> sum(M == repmat(v', 1, 4)) == size(M, 1) 
ans = 

    0 1 0 0 

octave> find(sum(M == repmat(v', 1, 4)) == size(M, 1)) 
ans = 2 
+0

Сумма (M == v ') дает мне ошибку аргументов nonconformat – user1926550

+0

@ user1926550: прекрасно работает здесь. Отправьте сообщение об ошибке. –

+0

после суммы (M == V ') я получаю: ошибка: mx_el_eq: аргументы nonconformat (op1 является 3x4, op2 является 3x1) ошибка: оценка список аргументов номер элемента 1 ошибка: оценка аргумент элемента списка номер 1 – user1926550

1

использование вещания (bsxfun), чтобы сравнить вектор к каждой из строк в матрице. Тогда find, какая строка является all верно

find (all (bsxfun (@eq, m, v'))) 
Смежные вопросы