2013-11-22 1 views
1

Предположим, у меня есть две матрицы pсоответствие две матрицы в MATLAB

p = 
1  3  6  7  3  6 
8  5 10 10 10  4 
5  4  8  9  1  7 
5  5  5  3  8  9 
9  3  5  4  3  1 
3  3  9 10  4  1 

затем после сортировки столбцов матрицы p в порядке возрастания

y = 
1  3  5  3  1  1 
3  3  5  4  3  1 
5  3  6  7  3  4 
5  4  8  9  4  6 
8  5  9 10  8  7 
9  5 10 10 10  9 

Я хочу знать, учитывая значение от y, что его ряд был в p

ex: значение 3, которое находится в матрице p, расположенной в r вл 6 колонок 1

то после сортировки он находится в матрице y в строке 2 столбца 1

Поэтому я хочу в конце значения после сортировки в матрице y, где она была первоначально в матрице p

+1

Что произойдет, если у вас есть повторяющиеся значения в столбце? Как вы сортируете столбцы? – darthbith

ответ

1

Просто использовать второй выход sort:

[y ind] = sort(p); 

Ваш желаемый результат (оригинал строки каждого значения) в матрице ind.

+0

проверено на работу 100% –

1

Команда Matlab sort возвращает второе значение, которое может быть использовано для индексации в исходный массив или матрицу. Из sort документации:

[Y,I] = sort(X,DIM,MODE) also returns an index matrix I. 
If X is a vector, then Y = X(I). 
If X is an m-by-n matrix and DIM=1, then 
    for j = 1:n, Y(:,j) = X(I(:,j),j); end 
0

Ok я понимаю, что именно вы хотите.

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

P и у имеют одинаковый размер ,

[n,m]=size(p); 

    for L=1:m 
    i=1; 
    temp=y(i,L); 
    while(i<=n) 
    if(temp==y(i,L)) 
    % So it is present in case i of p 
    disp(['It is present in line' num2str(i) ' of p']); 

    end 
    i=i+1; 
    end 
    end 

Voilà !!