R 将csv文件中的数据添加到netCDF文件

R 将csv文件中的数据添加到netCDF文件,r,csv,netcdf,R,Csv,Netcdf,我有一个csv文件,有两列-风速和cp(风力涡轮机功率系数)。 我还有各种netCDF文件(每个文件代表1年),每个网格点的风速为3度。(lat 424,lon 412) 我想在每个网格点将相应的cp值添加到netCDF文件中,即将cp作为变量添加到netCDF文件中,最好是在R中,但我也有一点使用python的经验。您不能做一个简单的插值来获得给定的cp值(1)V vs cp曲线(CSV文件)和(2)NetCDF文件中的速度?简单的插值在Python中非常快(我猜在R中也是如此),而且(几乎…

我有一个csv文件,有两列-风速和cp(风力涡轮机功率系数)。 我还有各种netCDF文件(每个文件代表1年),每个网格点的风速为3度。(lat 424,lon 412)


我想在每个网格点将相应的cp值添加到netCDF文件中,即将cp作为变量添加到netCDF文件中,最好是在R中,但我也有一点使用python的经验。

您不能做一个简单的插值来获得给定的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')

你不能做一个简单的插值来获得给定的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')

我认为这篇文章会很有帮助,谢谢你的评论。我看了一下,但我的csv文件中没有lat-lon值,所以我认为该方法不可行?问题是我需要根据netCDF文件中已有的风速将cp值分配给网格点……您希望如何将
cp
映射到速度?是否存在与某个
cp
值相对应的风速范围,例如
0正是这样,因此我考虑在R中使用IF语句,但csv文件中的速度和cp值会创建功率曲线,因此在理想情况下,不是使用速度范围来等于cp,而是每个速度值都表示0.6不等于10(以你为例)但是会对应于功率曲线在该速度下的精确cp值,比如cp=6…我认为这篇文章会很有帮助,谢谢你的评论。我看了一下,但我的csv文件中没有lat-lon值,所以我认为该方法不可行?问题是我需要根据风力sp将cp值分配给网格点netCDF文件中已经存在EED…您想如何将
cp
映射到速度?是否存在与某个
cp
值相对应的风速范围,例如
0确实如此,因此我考虑在R中使用IF语句,但csv文件中的速度和cp值会创建功率曲线,因此在理想世界中,而不是使用速度范围等于cp,每个速度值表示0.6不等于10(如您的示例)但会对应于该速度下功率曲线上的精确cp值,比如cp=6…谢谢你的回答。问题是,曲线方程中有一个变量,它也随风速值而变化,但我没有方程显示这种关系…是的,对不起,我没有解释清楚。简言之,我没有方程关于图表,我正在尝试附加图表,但我是这个网站的新手。谢谢你的回复。问题是,图表的方程式有一个变量,它也随风速值而变化,但我没有显示这种关系的方程式…是的,很抱歉,我没有解释清楚。简言之,我没有关于风速的方程式图,我试图附加的图表,但我是新到这个网站。