Индексирование матриц Matlab - PullRequest
0 голосов
/ 21 ноября 2011

Я пытаюсь вычислить две матрицы, одна из которых 400 * 2, а другая 20 * 20. Первый содержит координаты x и y 400 точек, а второй - еще 400 точек, где x равен 2 (i, i), а y - (i, k), а i и k - это 20 счетчиков чисел. Я пытаюсь вычислить расстояния между этими двумя точками матрицы, которые дали бы мне матрицу 400 * 400. Код, который я использую:

for i=1:20
    for j=1:400
        for k=1:20
        L(j,)=sqrt((C(j,1)-M(i,i))^2+(C(j,2)-M(k,i))^2);
        end
    end
end

C - первая матрица, а M - вторая. Теперь я знаю, что это звучит немного сложно, но проблема в том, что я не могу найти счетчик, чтобы отдать L (j,) эту часть. Если у вас есть идеи, пожалуйста, скажите ...

Редактировать: Ну, во-первых, думаю, что есть 2 точечных вектора. Х равен -0,95: 0,1: 0,95, а у одинаковы. Вектор М состоит в том, что все x соединены с Y, поэтому он будет иметь матрицу 20 * 20 или 400 * 2, однако я не мог заставить его работать как 400 * 2, поэтому мы использовали 20 * 20. Матрица немного Мне трудно это сделать, так что мое индексирование М показывает, что. Если бы у вас был лучший способ их сопряжения, я бы это тоже оценил.

Моя матрица выглядит так:

-0.95 -0.85 -0.75...
-0.95 -0.85 -0.75 ... 
.
.
.

Ответы [ 2 ]

3 голосов
/ 22 ноября 2011

Приведенный выше код должен быть очень медленным ... Использование большого количества циклов for не является "matlab-style" Что бы я сделал, это:

Mdiag=repmat(diag(M)',20,1);
L=pdist2(C,[Mdiag(:) M(:)]);

Первая строка извлекает диагональные члены M и повторяет их.

После этого [Mdiag(:) M(:)] - это стандартная форма вашего второго набора очков.

pdist2 - это функция, которая вычисляет все попарные расстояния.

0 голосов
/ 22 ноября 2011

Имеет ли значение, в каком порядке они находятся?Я предполагаю, что это не так, пока вы знаете , что это за приказ.Я бы использовал это:

for i=1:20
    for j=1:400
        for k=1:20
            L(j,(i-1)*20+k) = sqrt((C(j,1)-M(i,i))^2+(C(j,2)-M(k,i))^2);
        end
    end
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...