2012-03-09 4 views
0

Я использую pdist для вычисления эвклидовых расстояний между трехмерными точками (в Matlab). Однако у меня есть некоторые координаты, которые я не могу удалить из матрицы, но я хочу, чтобы pdist игнорировать.Как заставить pdist игнорировать значение (Matlab)

Я попытался переписать значения, которые я хочу игнорировать, с NaN, но pdist все еще использует их в расчете. Есть ли способ заставить pdist игнорировать значение в его процессе?

ответ

0

Я не знаю pdist, но похоже, что вам нужно удалить определенные строки, чтобы они работали так, как вы хотите. Если вы должны были найти индексы строк вы не хотите, вы можете сделать следующее:

d = [1,2,3;2,3,4;3,4,5] 
d = 
    1 2 3 
    2 3 4 
    4 5 6 
i = [1 3] 
d(i,:) 
    1 2 3 
    4 5 6 
id = pdist(d(i,:)) % assume id=2 
real_index = i(id) % now the real index is i(2)=3 

Теперь вы бы иметь индекс строки в real_index. (pdist, похоже, не существует в моей matlab, поэтому я не могу получить реальный результат, но идея есть!)

+0

Я знаю, но удаление строк - это не то, что я хочу (что изменит индексы, и это то, что мне нужно в конце концов). Мне нужен способ сделать значения «pdist» ignore без необходимости удалять фактические данные. –

+0

Он не изменит сама переменная - он просто передает анонимную переменную без строк в pdist (т.е. pdist (d (i, :))). d останется прежним. –

+0

Да, но он изменит вход для 'pdist' (и, следовательно, выход). Скажем, у меня есть матрица 'd', для которой вторая строка имеет наименьшее расстояние. После удаления первой строки 'pdist' вернет' 1' в качестве индекса для строки с наименьшим расстоянием (что неверно для 'd'). –