2014-11-18 2 views
0

У меня есть две матрицы A и B. Предположим, что я хотел бы найти в каждой строке матрицы A наименьшее число и для той же ячейки, что это число находится в матрице A, do найдите соответствующее число той же ячейки в матрице B. Например, число в матрице A будет находиться в позиции A (1,3), A (2,9) ... и я хочу, чтобы соответствующее число в B (1 , 3), B (2,9) ... Возможно ли это сделать, или я прошу что-то трудное для Matlab. Надеюсь, кто-то мне поможет.Matlab (та же ячейка в другой матрице)

+0

Можете ли вы привести примеры того, что вы хотите сделать? – Marcin

ответ

2

Что вы можете сделать, это использовать min и найти минимум по всем строкам для каждого столбца. Фактически вы бы использовали второй вывод, чтобы найти местоположение каждого столбца для каждой строки, которую вы хотите найти. Когда вы найдете их, просто используйте sub2ind для доступа к соответствующим значениям в B. Таким образом, попробовать что-то вроде этого:

[~,ind] = min(A,[],2); 
val = B(sub2ind(size(A), (1:size(A,1)).', ind)); 

val будет содержать выходные значения в матрице B, которые соответствуют той же позиции, что и минимальные значения каждой строки в A. Это также предполагает, что A и B имеют одинаковый размер. В качестве иллюстрации, вот пример. Давайте установим A и B как случайный массив из 4 x 4 целых чисел.

rng(123); 
A = randi(10, 4, 4) 
B = randi(10, 4, 4) 

A = 

    7  8  5  5 
    3  5  4  1 
    3 10  4  4 
    6  7  8  8 


B = 

    2  7  8  3 
    2  9  4  7 
    6  8  4  1 
    6  7  3  5 

Выполнив первую строку кода, мы получим следующее:

[~,ind] = min(A,[],2) 

ind = 

    3 
    4 
    1 
    1 

Это говорит нам о том, что минимальное значение первой строки является третий столбец, минимальное значение следующей строки 4-й столбец и т. д. и т. д. После того, как мы эти номера столбцов, давайте доступ, что соответствующие значения в B, поэтому мы хотели бы строки и столбцы (1,3), (2,4) и т.д. Таким образом, после запуска второго утверждения, мы получим:

val = B(sub2ind(size(A), (1:size(A,1)).', ind)) 

val = 

    8 
    7 
    6 
    6 

Если вы быстро проверьте доступные позиции в B по сравнению с A, мы нашли именно те места в B, которые соответствуют A.

+0

Как будто у вас есть ответы, готовые и ждущие вопроса! хороший +1. – Rashid

+0

О, спасибо большое rayryeng. Мне хотелось. Большое спасибо – user3714919

+0

@ user3714919 Вы очень желанны. Если это был ответ, который вы искали, пожалуйста, подумайте о его принятии :) – rayryeng

1
A = randi(9,[5 5]); 
B = randi(9,[5 5]); 
[C,I] = min(A'); 
B.*(A == repmat(C',1,size(A,2))) 

пример,

A = 

2  1  6  9  1 
2  4  4  4  2 
5  6  5  5  5 
9  3  9  3  6 
4  5  6  8  3 


B = 

3  5  6  8  1 
9  2  9  7  1 
5  6  6  5  6 
4  6  1  4  5 
5  3  7  1  9 

ans = 

0  5  0  0  1 
9  0  0  0  1 
5  0  6  5  6 
0  6  0  4  0 
0  0  0  0  9 

Вы можете использовать его как,

B(A == repmat(C',1,5)) 

ans = 

9 
5 
5 
6 
6 
5 
4 
1 
1 
6 
9 
+1

Должен ли вывод быть матрицей или должен быть вектором значений, извлеченных из 'A'? – rayryeng

+0

@rayryeng, хороший пункт! Я не знаю. – Rashid

+0

Хахаха тоже! Посмотрим, что должен сказать OP. – rayryeng

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