python中对数的处理使用什么结构最快?

numpy数组
这个数据使用列表还有其余的差距还是很大的

参考下面这两个代码,第二个是变快以后得

'''
计算每个CSV文件的终点坐标
进行1万次计算,得到值最小的距离,将CSV文件名前嘴,终点机场,机场ID,机场坐标,距离,存储在CSV文件中
'''
import os
import pandas as pd

import pandas as pd
import math

# 哈弗辛公式计算两点之间的距离
def haversine(coord1, coord2):
    lon1, lat1 = map(math.radians, coord1)
    lon2, lat2 = map(math.radians, coord2)
    
    dlon = lon2 - lon1
    dlat = lat2 - lat1
    
    a = math.sin(dlat / 2)**2 + math.cos(lat1) * math.cos(lat2) * math.sin(dlon / 2)**2
    c = 2 * math.asin(math.sqrt(a))
    
    # 地球半径,单位公里
    r = 6371.0
    distance = r * c
    return distance

# 查找与输入坐标距离最小的点
def find_nearest_point(input_coord, df):
    min_distance = float('inf')  # 设置初始的最小距离为无穷大
    nearest_name = None
    nearest_coord = None
    
    # 遍历df中的每一行,计算距离
    for index, row in df.iterrows():
        df_coord = (row['lon'],row['lat'] )
        distance = haversine(input_coord, df_coord)
        
        if distance < min_distance:
            min_distance = distance
            nearest_name = row['name']
            nearest_coord = df_coord
    
    return nearest_name, nearest_coord, min_distance

# 定义函数返回文件名前缀和终点坐标
def get_file_prefix_and_coordinates(directory):
    result = []
    
    # 遍历文件夹中的所有文件
    for filename in os.listdir(directory):
        if filename.endswith('.csv'):
            # 获取文件名前缀(假设前缀是文件名去掉扩展名部分)
            file_prefix = os.path.splitext(filename)[0]
            
            # 读取CSV文件
            file_path = os.path.join(directory, filename)
            df = pd.read_csv(file_path)
            
            # 假设终点坐标是CSV文件中的最后一行的'lat'和'lon'列
            if 'lat' in df.columns and 'lon' in df.columns:
                endpoint_lat = df['lat'].iloc[-1]
                endpoint_lon = df['lon'].iloc[-1]
                
                # 将文件名前缀和终点坐标添加到结果中
                result.append((file_prefix, endpoint_lon, endpoint_lat))
    
    return result
import math
#经纬度计算公里数
def haversine(coord1, coord2):
    # 坐标转换为弧度
    lat1, lon1 = map(math.radians, coord1)
    lat2, lon2 = map(math.radians, coord2)
    
    # 哈弗辛公式
    dlon = lon2 - lon1
    dlat = lat2 - lat1
    
    a = math.sin(dlat / 2)**2 + math.cos(lat1) * math.cos(lat2) * math.sin(dlon / 2)**2
    c = 2 * math.asin(math.sqrt(a))
    
    # 地球半径(公里)
    r = 6371.0
    distance = r * c
    
    return distance

# 指定CSV文件夹路径
directory = '/data/lh123/lh/track_prediction_820/code/RNN-LSTM-GRU--based-Aircraft-Trajectory-Prediction-main/8_21/data_926/data'

# 调用函数并打印结果
file_prefix_and_coordinates = get_file_prefix_and_coordinates(directory)

#得到飞机场坐标信息
import pandas as pd

# 指定输入和输出文件路径
input_file = '/data/lh123/lh/track_prediction_820/code/RNN-LSTM-GRU--based-Aircraft-Trajectory-Prediction-main/8_21/data_930/all_data_3column.csv'
# 读取CSV文件,并指定只读取'name', 'lat', 'lon'三列
df = pd.read_csv(input_file, usecols=['name', 'lat', 'lon'])
# 打印读取的内容,确认已读取的内容正确
print(df)
airport_list=[]#飞机场
min_distance_list=[]
file_name_list=[]
airportlon_list=[]
airportlat_list=[]
num =0 
for file_name,lon,lat in file_prefix_and_coordinates:  #对
    num =num +1 
    print(num)
    # coord1 = (31.2304, 121.4737)  # 洛杉矶
    # coord2 = (39.9042,116.4074)    # 纽约
    airport, (airportlon,airportlat), min_distance = find_nearest_point((lon,lat), df)
    airport_list.append(airport)
    min_distance_list.append(min_distance)
    file_name_list.append(file_name)
    airportlon_list.append(airportlon)
    airportlat_list.append(airportlat)


    # print(f"最近的地点: {nearest_name}")
    # print(f"最近的坐标: {nearest_coord}")
    print(f"相距: {min_distance:.2f} 公里")

# 创建一个字典
data = {
    'csv_name': file_name_list,
    'airport_name': airport_list,
    'airport_lon': airportlon_list,
    'airport_lat': airportlat_list,
    'min_distance': min_distance_list
}

# 转换为DataFrame
df = pd.DataFrame(data)


```python
import os
import pandas as pd
import numpy as np
import math

# 哈弗辛公式计算两点之间的距离
def haversine(coord1, coord2):
    lon1, lat1 = map(math.radians, coord1)
    lon2, lat2 = map(math.radians, coord2)
    
    dlon = lon2 - lon1
    dlat = lat2 - lat1
    
    a = math.sin(dlat / 2)**2 + math.cos(lat1) * math.cos(lat2) * math.sin(dlon / 2)**2
    c = 2 * math.asin(math.sqrt(a))
    
    # 地球半径,单位公里
    r = 6371.0
    return r * c

# 查找与输入坐标距离最小的点
def find_nearest_point(input_coord, df):
    df_coords = df[['lon', 'lat']].to_numpy()
    distances = np.array([haversine(input_coord, (lon, lat)) for lon, lat in df_coords])
    min_index = np.argmin(distances)
    return df['name'].iloc[min_index], df_coords[min_index], distances[min_index]

# 定义函数返回文件名前缀和终点坐标
def get_file_prefix_and_coordinates(directory):
    result = []
    for filename in os.listdir(directory):
        if filename.endswith('.csv'):
            file_prefix = os.path.splitext(filename)[0]
            file_path = os.path.join(directory, filename)
            df = pd.read_csv(file_path)
            if 'lat' in df.columns and 'lon' in df.columns:
                endpoint_lat = df['lat'].iloc[-1]
                endpoint_lon = df['lon'].iloc[-1]
                result.append((file_prefix, endpoint_lon, endpoint_lat))
    return result

# 指定CSV文件夹路径
directory = '/data/lh123/lh/track_prediction_820/code/RNN-LSTM-GRU--based-Aircraft-Trajectory-Prediction-main/8_21/data_926/data'
file_prefix_and_coordinates = get_file_prefix_and_coordinates(directory)

# 得到飞机场坐标信息
input_file = '/data/lh123/lh/track_prediction_820/code/RNN-LSTM-GRU--based-Aircraft-Trajectory-Prediction-main/8_21/data_930/all_data_3column.csv'
df = pd.read_csv(input_file, usecols=['name', 'lat', 'lon'])

airport_list = []
min_distance_list = []
file_name_list = []
airportlon_list = []
airportlat_list = []

for num, (file_name, lon, lat) in enumerate(file_prefix_and_coordinates, start=1):
    print(num)
    airport, (airportlon, airportlat), min_distance = find_nearest_point((lon, lat), df)
    airport_list.append(airport)
    min_distance_list.append(min_distance)
    file_name_list.append(file_name)
    airportlon_list.append(airportlon)
    airportlat_list.append(airportlat)

    print(f"相距: {min_distance:.2f} 公里")

# 创建一个字典
data = {
    'csv_name': file_name_list,
    'airport_name': airport_list,
    'airport_lon': airportlon_list,
    'airport_lat': airportlat_list,
    'min_distance': min_distance_list
}

# 转换为DataFrame并保存
output_df = pd.DataFrame(data)
output_df.to_csv('output.csv', index=False)





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值