stu.csvには850,000行と3列が含まれています。 2列目はIDの経度、3列目はIDの緯度です。 stu.csvファイルのデータは次のようになります。Rコードの実行速度が遅く、このコードを高速化および書き直す方法
ID longitude latitude
156 41.88367183 12.48777756
187 41.92854333 12.46903667
297 41.89106861 12.49270456
89 41.79317669 12.43212196
79 41.90027472 12.46274618
... ... ...
擬似コードは次のとおりです。それは経度と緯度と地球の表面上に2つのIDの間の距離を計算することを目的とする、任意の2つのIDから累積和を出力:
dlon = lon2 - lon1
dlat = lat2 - lat1
a = (sin(dlat/2))^2 + cos(lat1) * cos(lat2) * (sin(dlon/2))^2
c = 2 * atan2(sqrt(a), sqrt(1-a))
distance = 6371000 * c (where 6371000 is the radius of the Earth)
このコードは以下の通りであるが、それは遅すぎる実行されます。どのように高速化し、コードを書き換えますか?ありがとうございました。
stu<-read.table("stu.csv",header=T,sep=",");
## stu has 850,000 rows and 3 columns.
m<-nrow(stu);
distance<-0;
for (i in 1:(m-1))
{
for (j in (i+1))
{
dlon = stu[j,2] - stu[i,2];
dlat = stu[j,3] - stu[i,3];
a = (sin(dlat/2))^2 + cos(stu[i,3]) * cos(stu[j,3]) * (sin(dlon/2))^2;
c = 2 * atan2(sqrt(a), sqrt(1-a));
distance <-distance+6371000 * c;
}
}
distance
アンO(N^2)のアルゴリズムは常にN = 850000 .... chinsoon12 @ –
をいただき、ありがとうございます長い時間がかかるとしていますあなたの返信。私は問題を説明します – user2405694
@ chinsoon12はい – user2405694