Как представить список точек в R - PullRequest
3 голосов
/ 03 мая 2010

Я работаю с большим списком точек (каждая точка имеет три измерения x, y, z).

Я довольно новичок в R, поэтому мне хотелось бы знать, как лучше всего представлять такую ​​информацию. Насколько я знаю, массив позволяет мне представлять любые многомерные данные, поэтому в настоящее время я использую:

> points<-array( c(1,2,0,1,3,0,2,4,0,2,5,0,2,7,0,3,8,0), dim=c(3,6) )
> points
     [,1] [,2] [,3] [,4] [,5] [,6]
[1,]    1    1    2    2    2    3  -- x dim
[2,]    2    3    4    5    7    8  -- y dim
[3,]    0    0    0    0    0    0  -- z dim

Цель состоит в том, чтобы выполнить некоторые вычисления для вычисления евклидова расстояния между двумя наборами точек, например:

points1<-array( c(1,2,0,1,3,0,2,4,0,2,5,0,2,7,0,3,8,0), dim=c(3,6) )
points2<-array( c(2,2,0,1,4,0,2,3,0,2,4,0,2,6,0,2,8,0), dim=c(3,6) )

(любая подсказка в этом смысле также будет высоко оценена)

Ответы [ 4 ]

4 голосов
/ 04 мая 2010

Вычислить евклидово расстояние между двумя наборами точек, сохраненных так, просто:

sqrt(colSums((points1 - points2)^2))

Хотя я бы рекомендовал хранить размеры в столбцах. В этом случае код становится:

sqrt(rowSums((points1 - points2)^2))
4 голосов
/ 04 мая 2010

Вы можете получить матрицу расстояний, используя функцию dist . Эта функция вычисляет расстояния между строками матрицы данных, поэтому я транспонировал ваши точки массив

dist(t(points),method = "euclidean")

Еще одна похожая функция для вычисления матрицы расстояний - Dist из пакета amap, которая обеспечивает еще больше мер расстояния: ("euclidean", "Maximum", "Manhattan", "Canberra", " бинарный "," пирсон "," корреляция "," копейщик "," кендалл ")

2 голосов
/ 03 мая 2010

Вероятно, вы захотите узнать, что может предложить представление задач CRAN для анализа данных - есть несколько подходящих пакетов.

1 голос
/ 04 мая 2010

Я бы посоветовал поработать с транспонированной матрицей, иначе вы, вероятно, в конечном итоге вызовете функцию t () чаще, чем в противном случае.

Кроме того, это, вероятно, та структура данных, которую вы хотите. Конечно, вы могли бы сделать это с помощью фрейма данных, но я думаю, что вам лучше не делать этого в этой ситуации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...