NumPy加载文本:提取经纬度浮点数生成二维数组的格式设置
提取带标签的经纬度数据生成二维NumPy数组
嘿,作为刚上手NumPy和Python的新手,这种带标签的经纬度数据提取需求其实挺常见的,我来一步步教你怎么搞定~
核心思路
你的数据里每个lat和lon是成对出现的(lat0对应lon0,lat1对应lon1...),所以我们只需要:
- 把所有浮点数从文本里提取出来
- 每两个浮点数一组(第一个是纬度,第二个是经度)
- 转成NumPy二维数组,让第0列存纬度、第1列存经度
方法一:正则提取 + NumPy重塑
这种方法步骤清晰,不管数据是字符串还是文本文件都适用:
1. 导入需要的库
import re import numpy as np
2. 处理字符串形式的数据
如果你的数据直接存在字符串变量里:
# 示例数据 data_str = "lat0 37.792480, lon0 -122.397450 lat1 39.792480, lon1 -132.397450" # 用正则提取所有带正负号的浮点数 float_strings = re.findall(r'-?\d+\.\d+', data_str) # 把字符串转成float类型的列表 floats_list = list(map(float, float_strings)) # 把列表重塑为二维数组:自动计算行数,每行固定2个元素(lat, lon) coords_array = np.array(floats_list).reshape(-1, 2)
3. 处理文本文件里的数据
如果数据存在data.txt文件中,先读取文件内容再重复提取步骤:
with open('data.txt', 'r') as f: data_str = f.read() # 后续提取和重塑步骤和上面完全一致 float_strings = re.findall(r'-?\d+\.\d+', data_str) floats_list = list(map(float, float_strings)) coords_array = np.array(floats_list).reshape(-1, 2)
方法二:清理文本 + NumPy原生加载工具
如果你想用NumPy自带的加载函数,可以先把文本里的标签、标点清理掉,再用loadtxt读取:
import numpy as np import re with open('data.txt', 'r') as f: data_str = f.read() # 把所有非数字、非小数点、非负号的字符替换成空格 cleaned_data = re.sub(r'[^\d.-]', ' ', data_str) # 分割成浮点数数组后重塑为目标格式 coords_array = np.loadtxt(cleaned_data.split()).reshape(-1, 2)
验证结果
运行完上面的代码后,coords_array就是你要的二维数组:
print(coords_array) # 输出: # [[ 37.79248 -122.39745] # [ 39.79248 -132.39745]]
第0列是所有纬度值,第1列是对应的经度值,完全匹配你的需求~
内容的提问来源于stack exchange,提问作者Nixit Patel
相关产品推荐
相关产品推荐

