我有一个带有两列的csv文件 - 风速和cp(风力发电机功率系数)。 我还有各种netCDF文件(每个代表1年),每个网格点有3小时的风速。 (lat 424,lon 412)。
我想在每个网格点将相应的cp值添加到netCDF文件中,即将cp作为变量添加到netCDF文件中,最好是在R中,但我也有一点使用python的经验。
答案 0 :(得分:0)
您是否可以进行简单插值以获得给定的cp值(1)V vs cp曲线(CSV文件)和(2)NetCDF文件的速度?简单的插值在Python中非常快(我猜也在R中),而且(差不多......)肯定比自己实现的东西更快。
如果您的CSV文件中的V vs cp曲线非常详细,您可以使用最近邻插值这样简单的东西,如果没有更好的选择。例如:
import numpy as np
import matplotlib.pylab as pl
from scipy import interpolate
# Given combinations of velocity and cp (from CSV file):
V_csv = np.linspace(0,10,4)
cp_csv = V_csv**2.
# Random velocities in the range {0..10} (from NetCDF file):
V = np.random.random(5)*10
# Create linear, nearest neighbour and quadratic interpolation functions
f_near = interpolate.interp1d(V_csv, cp_csv, kind='nearest')
f_lin = interpolate.interp1d(V_csv, cp_csv, kind='linear')
f_quad = interpolate.interp1d(V_csv, cp_csv, kind='quadratic')
# Interpolate:
cp_near = f_near(V)
cp_lin = f_lin(V)
cp_quad = f_quad(V)
# Visulalization
pl.figure()
pl.plot(np.linspace(0,10,256), np.linspace(0,10,256)**2., label='Real V vs cp curve')
pl.plot(V_csv, cp_csv, '-x', label='Given (discrete) V vs. cp curve')
pl.scatter(V, cp_near, label='nearest')
pl.scatter(V, cp_lin, label='linear')
pl.scatter(V, cp_quad, label='quadratic')
pl.legend(frameon=False, loc='best')
pl.xlabel('V')
pl.ylabel('cp')