我在NewYorkCity有一个巨大的数据集A,每个房子/经度的纬度和经度。 还有纽约市每个地铁站/入口的纬度和经度数据集B.
对于每个房子,我想确定最近的地铁站和到那个车站的距离。 问题是我有成千上万的房子和数百个地铁站。如果我要计算每个房屋的距离,那就浪费时间了。 识别最近的一种方法的最快方法是什么? R或Python中的任何包可以帮助我快速完成吗?
答案 0 :(得分:1)
如果每一行代表一个家,每列代表一个工作站,你可以简单地计算距离矩阵并找到每一行的最小值。
$array = array(
array(
array(
'code'=>'AA',
'name'=>'A Name',
'cost'=>'10',
),
array(
'code'=>'AB',
'name'=>'B Name',
'cost'=>'15',
),
),
array(
array(
'code'=>'AA',
'name'=>'A Name',
'cost'=>'15',
),
array(
'code'=>'AB',
'name'=>'B Name',
'cost'=>'10',
),
array(
'code'=>'AC',
'name'=>'C Name',
'cost'=>'10',
),
),
array(
array(
'code'=>'AA',
'name'=>'A Name',
'cost'=>'5',
),
array(
'code'=>'AB',
'name'=>'B Name',
'cost'=>'10',
),
array(
'code'=>'AC',
'name'=>'C Name',
'cost'=>'15',
),
),
);
$the_biggest_number=count($array);
$new_array = array();
foreach ($array as $key => $val) {
foreach ($val as $sub_key => $sub_val) {
if(!isset($new_array[$sub_val['code']])){
$sub_val['count']=1;
$new_array[$sub_val['code']]=$sub_val;
}
else{
$new_array[$sub_val['code']]['cost'] += $sub_val['cost'];
$new_array[$sub_val['code']]['count'] += 1;
}
}
}
$result=array();
foreach ($new_array as $key => $val) {
if($val['count']==$the_biggest_number){
unset($val['count']);
$result[]=$val;
}
}
$result= array($result);
echo '<pre>';
print_r($result);
包在这里很有用,因为它会根据坐标计算距离
你会注意到我把经度放在第一位,距离函数geosphere
就这样命令。
请read about the package here。我只是按照示例的说明进行操作。
示例:
distHaversine
答案 1 :(得分:0)
我可能会尝试使用四叉树。
R和python都有实现:
答案 2 :(得分:0)
如果我要计算每个房屋的距离,那就是时间 浪费。
并不是真正的计算机用途。我无法想象在共同的桌面上花费数小时。
这是未经测试的,请考虑伪代码:
# distance between points is sqrt((x1-x2)^2 + (y1-y2)^2)
houses = [[32,54],[3,2],[15,16]]
subways = [[123,2],[54,3],[56,6],[54,32],[1,65],[43,1],[13,16],[21,6],[5,1]]
distances = []
for i in range(len(houses)):
distances.append([])
for j in range(len(subways)):
delta_x = house[i][0]-subway[j][0]
delta_y = house[i][1]-subway[j][1]
distance = (delta_x**2 + delta_y**2)**(0.5)
distances[i].append(distance)
min_idx = distances.index(min(distances))
print 'closest subway to house number %s at %s is subway number %s at %s' (
i, house[i], min_idx, subways[min_idx])
我想要5万个房子和500个地铁,你可以在一小时内找到答案。