插补经度和纬度坐标的数据序列-输入数据中的错误

时间:2019-04-18 17:33:23

标签: python scipy interpolation

我想基于一组经度和纬度值进行插值。

我使用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. 但是我只是不知道哪些输入应该是无效的。读入的所有值均为浮点值,也不存在任何值。插值应在大约900个坐标上执行。但是即使有50个坐标,也会引发此异常。我的代码中是否有任何限制可以解释这种异常?

非常感谢您!

2 个答案:

答案 0 :(得分:1)

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并查看问题是否仍然存在。

答案 1 :(得分:0)

问题是我的数据集中有个重复的数据。显然,scipy在处理它方面存在一些问题。 删除所有重复的数据点后,上面显示的代码运行完美。