首页 > 解决方案 > 插值经度和纬度坐标的数据系列 - 输入数据中的错误

问题描述

我想根据一组经度和纬度值执行插值。

我用库 SciPy.interpolate 试过这个。下面显示的代码也适用于简单的数据系列。

import numpy as np
import matplotlib.pyplot as plt
from scipy import interpolate
import csv

csv_file = csv.DictReader(open(file=file_path))
longitude = []
latitude = []
for row in csv_file:
    longitude.append(float(row['longitude']))
    latitude.append(float(row['latitude']))

plt.scatter(longitude, latitude, color='blue', label='given')

tck, u = interpolate.splprep([longitude, latitude], s=0.0)
x_i, y_i= interpolate.splev(np.linspace(0, 1, 100), tck)

plt.plot(x_i, y_i, color='green', label='calculated')
plt.legend()
plt.show()

如果我尝试使用真实的经度和纬度值执行代码,我会得到一个我无法解释其含义的异常。

在第 15 行抛出异常: (tck, u = interpolate.splprep([longitude, latitude], s=0.0))

它说:ValueError: Invalid inputs. 但我只是不知道哪些输入应该是无效的。读入的所有值都是浮点值,None 值也不存在。插值应该在大约 900 个坐标上执行。但即使有 50 个坐标,也会引发此异常。我的代码中是否有任何限制可以解释这种异常?

非常感谢你!

标签: pythonscipyinterpolation

解决方案


csv 导入一定有问题,我只是按原样运行了 1000 个随机浮点对的代码,它执行时没有任何错误。尝试初始化你的数组

for i in range(0, 1000):
    longitude.append(random.randrange(0.0, 120.0))
    latitude.append(random.randrange(0.0, 89.0))

而不是导入 csv 并查看您的问题是否仍然存在。


推荐阅读