使用 lat-long 生成随机数据
Generate random data with lat-long
我正在尝试生成具有特定纬度和经度范围的随机数据。下面的代码执行时没有错误,也生成了输出,但并不完全符合我的预期。
节目:
import random
import sys
import math
latitude = 19.99
longitude = 73.78
output_file = 'filename'
def generate_random_data():
with open(output_file, 'w') as output:
hex1 = '%012X' % random.randint(0,100)
flt = float(random.randint(0,100))
latitude = math.acos(random.random() * 2 - 1)
longitude = random.random() * math.pi * 2
output.write('%s %.1f %.6f %.6f \n' % (hex1.lower(), flt, longitude, latitude))
if __name__ == '__main__':
generate_random_data()
上面的代码运行但只给出一行(这可能是缩进问题)但这并没有给我随机 lat
& long
在所需的地理位置,如上所述。
生成的输出:
000000000020 95.0 3.929691 1.749931
预期输出:
000000000020 95.0 19.999691 73.799931
这只会生成 one
行,而我试图生成 million
行
你需要在某处调用你的函数。
通常,在 Python 中,您会执行以下操作:
if __name__ == '__main__':
generate_random_data()
我想这就是你想要做的。我知道你正在写一个文件;为了这个例子,我把它去掉了。
import random
import sys
import math
latitude = 19.99
longitude = 73.78
def generate_random_data(lat, lon, num_rows):
for _ in xrange(num_rows):
hex1 = '%012x' % random.randrange(16**12) # 12 char random string
flt = float(random.randint(0,100))
dec_lat = random.random()/100
dec_lon = random.random()/100
print '%s %.1f %.6f %.6f \n' % (hex1.lower(), flt, lon+dec_lon, lat+dec_lat)
generate_random_data(latitude, longitude, 5)
打印:
31d831302b7f 99.0 73.789561 19.997404
c6ef41c70ebb 0.0 73.780732 19.994279
4bc2df5388e3 77.0 73.785531 19.994191
e7648f673475 40.0 73.786610 19.993679
a11502c744a6 32.0 73.784650 19.997702
编辑:所以你的函数包括写入文件将如下
import random
import sys
import math
latitude = 19.99
longitude = 73.78
file_n = 'random_lat_lon.txt'
def generate_random_data(lat, lon, num_rows, file_name):
with open(file_name, 'w') as output:
for _ in xrange(num_rows):
hex1 = '%012x' % random.randrange(16**12)
flt = float(random.randint(0,100))
dec_lat = random.random()/100
dec_lon = random.random()/100
output.write('%s %.1f %.6f %.6f \n' % (hex1.lower(), flt, lon+dec_lon, lat+dec_lat))
generate_random_data(latitude, longitude, 5, file_n)
将 EDIT 上方发布的数据生成到名为 'random_lat_lon.txt' 的文件中。
我修改了@Scott 的回复以创建 CSV 而不是 txt 文件:
import random
import sys
import math
latitude = 0.794501
longitude = -0.752568
file_n = 'random_lat_lon.csv'
def generate_random_data(lat, lon, num_rows, file_name):
with open(file_name, 'w') as output:
for _ in xrange(num_rows):
hex1 = '%012x' % random.randrange(16**12)
flt = float(random.randint(0,100))
dec_lat = random.random()/100
dec_lon = random.random()/100
output.write('%s,%.1f,%.6f,%.6f \n' % (hex1.lower(), flt, lon+dec_lon, lat+dec_lat))
generate_random_data(latitude, longitude, 600, file_n)
这是我使用 NumPy 的版本:
import numpy as np
def random_lat_lon(n=1, lat_min=-90., lat_max=90., lon_min=-180., lon_max=180.):
"""
this code produces an array with pairs lat, lon
"""
lat = np.random.uniform(lat_min, lat_max, n)
lon = np.random.uniform(lon_min, lon_max, n)
return np.array(tuple(zip(lat, lon)))
我正在尝试生成具有特定纬度和经度范围的随机数据。下面的代码执行时没有错误,也生成了输出,但并不完全符合我的预期。
节目:
import random
import sys
import math
latitude = 19.99
longitude = 73.78
output_file = 'filename'
def generate_random_data():
with open(output_file, 'w') as output:
hex1 = '%012X' % random.randint(0,100)
flt = float(random.randint(0,100))
latitude = math.acos(random.random() * 2 - 1)
longitude = random.random() * math.pi * 2
output.write('%s %.1f %.6f %.6f \n' % (hex1.lower(), flt, longitude, latitude))
if __name__ == '__main__':
generate_random_data()
上面的代码运行但只给出一行(这可能是缩进问题)但这并没有给我随机 lat
& long
在所需的地理位置,如上所述。
生成的输出:
000000000020 95.0 3.929691 1.749931
预期输出:
000000000020 95.0 19.999691 73.799931
这只会生成 one
行,而我试图生成 million
行
你需要在某处调用你的函数。
通常,在 Python 中,您会执行以下操作:
if __name__ == '__main__':
generate_random_data()
我想这就是你想要做的。我知道你正在写一个文件;为了这个例子,我把它去掉了。
import random
import sys
import math
latitude = 19.99
longitude = 73.78
def generate_random_data(lat, lon, num_rows):
for _ in xrange(num_rows):
hex1 = '%012x' % random.randrange(16**12) # 12 char random string
flt = float(random.randint(0,100))
dec_lat = random.random()/100
dec_lon = random.random()/100
print '%s %.1f %.6f %.6f \n' % (hex1.lower(), flt, lon+dec_lon, lat+dec_lat)
generate_random_data(latitude, longitude, 5)
打印:
31d831302b7f 99.0 73.789561 19.997404
c6ef41c70ebb 0.0 73.780732 19.994279
4bc2df5388e3 77.0 73.785531 19.994191
e7648f673475 40.0 73.786610 19.993679
a11502c744a6 32.0 73.784650 19.997702
编辑:所以你的函数包括写入文件将如下
import random
import sys
import math
latitude = 19.99
longitude = 73.78
file_n = 'random_lat_lon.txt'
def generate_random_data(lat, lon, num_rows, file_name):
with open(file_name, 'w') as output:
for _ in xrange(num_rows):
hex1 = '%012x' % random.randrange(16**12)
flt = float(random.randint(0,100))
dec_lat = random.random()/100
dec_lon = random.random()/100
output.write('%s %.1f %.6f %.6f \n' % (hex1.lower(), flt, lon+dec_lon, lat+dec_lat))
generate_random_data(latitude, longitude, 5, file_n)
将 EDIT 上方发布的数据生成到名为 'random_lat_lon.txt' 的文件中。
我修改了@Scott 的回复以创建 CSV 而不是 txt 文件:
import random
import sys
import math
latitude = 0.794501
longitude = -0.752568
file_n = 'random_lat_lon.csv'
def generate_random_data(lat, lon, num_rows, file_name):
with open(file_name, 'w') as output:
for _ in xrange(num_rows):
hex1 = '%012x' % random.randrange(16**12)
flt = float(random.randint(0,100))
dec_lat = random.random()/100
dec_lon = random.random()/100
output.write('%s,%.1f,%.6f,%.6f \n' % (hex1.lower(), flt, lon+dec_lon, lat+dec_lat))
generate_random_data(latitude, longitude, 600, file_n)
这是我使用 NumPy 的版本:
import numpy as np
def random_lat_lon(n=1, lat_min=-90., lat_max=90., lon_min=-180., lon_max=180.):
"""
this code produces an array with pairs lat, lon
"""
lat = np.random.uniform(lat_min, lat_max, n)
lon = np.random.uniform(lon_min, lon_max, n)
return np.array(tuple(zip(lat, lon)))