3x21525 数组的插值

问题描述 投票:0回答:1
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

xDist,yDat,density = np.genfromtxt('asd.csv', delimiter = ',', usecols= (14,15,10), unpack =True, skip_header = 1)
df = pd.DataFrame({"Horizontal_Distance_x": xDist, "Raw_y_data": yDat, "Density": density})
df.drop(df[(df.Raw_y_data <= 590000) | (df.Horizontal_Distance_x < 500000) | \
           (df.Horizontal_Distance_x > 1500000)].index, inplace=True)
density_d = df.Density/1000
yDat_y=(-1000000+df.Raw_y_data)/1000
xDist_x=(df.Horizontal_Distance_x-500000)/1000
df2 = pd.DataFrame({"Horizontal_Distance_x": xDist_x, "Raw_y_data": yDat_y, "Density": density_d})

df.to_csv("x_y_density.csv", index=False)
df2.to_csv("x_y_density2.csv", index=False)

plt.xlim([0,1000])
plt.xticks(range(0,1001,200))
plt.ylim(-400,0)
plt.grid(True)
plt.scatter(df2.Horizontal_Distance_x, df2.Raw_y_data, s=10)

所以,Raw_y_data 中的变量在“x_y_density2.csv”中达到-375.01,我只想将这个数字插值到-400。我希望现在清楚了。

python arrays interpolation
1个回答
0
投票

你的问题有点不清楚,部分原因是你的情节有

Raw_y_data
Horizontal_Distance_x
,而你想要的是
Raw_y_data
(外推)值,而不是x值。 (我还假设你的意思是外推,而不是内插。但是由于我们看不到你的数据,也没有显示数据的数字,所以这个答案中有很多猜测。)

您可以使用来自 SciPy样条插值器之一。例如,

PchipInterpolator

import numpy as np
from scipy.interpolate import PchipInterpolator

interpolator = PchipInterpolator(df2.Raw_y_data, df2.Horizontal_Distance_x)

extrapolated_value = interpolator(-400)

根据您的数据和插值器的选择,您可能会得到一个不错的近似值,或者一个偏离图表的近似值。 在 SciPy 文档 中有更多关于这方面的内容,有一大堆例子。

© www.soinside.com 2019 - 2024. All rights reserved.