Python提取MULTIPOINT格式数据中X值的通用方法求助
提取MULTIPOINT格式数据中的X值
问题描述
我有两组图表重叠的点数据,格式为MULTIPOINT,所有Y值均相同。需要分离并提取其中的X值,尝试用.split()函数但未成功。后续要处理更多数据集,希望得到无需预知X值的通用Python实现方法。
现有代码
import pandas as pd import numpy as np import math from shapely.geometry import LineString import matplotlib.pyplot as plt df = pd.read_csv("C:\\Users\\Kyle\\Desktop\\Plot_Values1.csv") Distance = df['distance'] intensity = df['Gray_Value'] intensity_norm = (intensity - intensity.min())/ (intensity.max() - intensity.min()) x = Distance y = intensity_norm y2= np.full_like(intensity_norm, 1 / math.exp(2)) plt.plot(x, intensity_norm) plt.axhline(y=1/math.exp(2), color='r', linestyle='-') first_line = LineString(np.column_stack((x, y2))) second_line = LineString(np.column_stack((x, y))) intersection = first_line.intersection(second_line) Inter = np.full_like(intersection, intersection)
注:曾尝试用.split(" ")按空格拆分数据,但未成功。
解决方案
从代码看,intersection是shapely的MultiPoint对象,直接用字符串拆分容易出错,应该用shapely内置的属性和方法来提取坐标:
通用提取方法
# 提取MultiPoint中的所有X值 x_values = [point.x for point in intersection.geoms] # 转换成numpy数组(方便后续数值处理) x_values_np = np.array(x_values)
完整整合代码
import pandas as pd import numpy as np import math from shapely.geometry import LineString import matplotlib.pyplot as plt df = pd.read_csv("C:\\Users\\Kyle\\Desktop\\Plot_Values1.csv") Distance = df['distance'] intensity = df['Gray_Value'] intensity_norm = (intensity - intensity.min())/ (intensity.max() - intensity.min()) x = Distance y = intensity_norm y2= np.full_like(intensity_norm, 1 / math.exp(2)) plt.plot(x, intensity_norm) plt.axhline(y=1/math.exp(2), color='r', linestyle='-') first_line = LineString(np.column_stack((x, y2))) second_line = LineString(np.column_stack((x, y))) intersection = first_line.intersection(second_line) # 提取X值的核心代码 if hasattr(intersection, 'geoms'): # 处理MultiPoint情况 x_values = [p.x for p in intersection.geoms] else: # 处理单个Point的情况 x_values = [intersection.x] x_values = np.array(x_values) print("提取的X值:", x_values)
说明
- shapely的
MultiPoint对象自带geoms属性,遍历该属性即可获取每个Point实例 - 每个Point实例的
.x属性直接对应X坐标,无需手动拆分字符串,避免因格式变动导致的错误 - 加入了对单个Point的兼容处理,确保代码在只有一个交点时也能正常运行
内容的提问来源于stack exchange,提问作者kyle stegman
相关产品推荐
相关产品推荐

