- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
假设我们有 TRMM 降水数据,每个文件代表每个月的数据。例如文件夹中的文件是:
3B42.1998.01.01.7A.nc,
3B42.1998.02.01.7A.nc,
3B42.1998.03.01.7A.nc,
3B42.1998.04.01.7A.nc,
3B42.1998.05.01.7A.nc,
......
......
3B42.2010.11.01.7A.nc,
3B42.2010.12.01.7A.nc.
这些文件的尺寸如下:Xsize=1440、Ysize=400、Zsize=1、Tsize=1。经度设置为 0 到 360,纬度设置为 -50 到 50。我想计算某个区域的降水量,比如在 lon=98.5, lon=100 和 lat=4, lat=6.5
之间。这意味着,仅读取该区域中的变量 -:
--------------------
|经度:98.5 纬度:6.5|
| |
|纬度:4 经度:100 |
----------------------------------
我曾经在 GrADS(网格分析和显示系统)中这样做过。在 GrADS 中,可以这样做:(简化版本)
yy=1998
while yr < 2011
'sdfopen f:\data\trmm\3B42.'yy'.12.01.7A.nc'
'd aave(pcp,lon=98.5,lon=100.0,lat=4.0,lat=6.5)'
res=subwrd(result,4)
rec=write('d:\precip.sp.TRMM3B42.1.'yy'.csv',res,append)
yy = yy+1
endwhile
我尝试在 Python 中做同样的事情,但是出了问题。经过一些建议后,我现在在这里:
import csv
import netCDF4 as nc
import numpy as np
#calculating december only
f = nc.MFDataset('d:/data/trmm/3B43.????.12.01.7A.nc')#maybe I shouldn't do MFDataset?
pcpt = f.variables['pcp']
lon = f.variables['longitude']
lat = f.variables['latitude']
# Determine which longitudes
latidx1 = (lat >=4.0 ) & (lat <=6.5 )
lonidx1 = (lon >=98.5 ) & (lon <=100.0 )
rainf1 = pcpt[:]
rainf1 = rainf1[:, latidx1][..., lonidx1]
rainf_1 = rainf1
with open('d:/trmmtest.csv', 'wb') as fp:
a = csv.writer(fp)
for i in rainf_1:
a.writerow([i])
此脚本在 CSV 文件中生成(在我的例子中)15 个值的列表。但是当我尝试获取另一个区域的值并调整我认为必要的值时,可以说:
latidx2 = (lat >=1.0 ) & (lat <=1.5 )
lonidx2 = (lon >=102.75 ) & (lon <=103.25 )
rainf2 = pcpt[:]
rainf2 = rainf2[:, latidx2][..., lonidx2]
rainf_2 = rainf2
我得到与第一个相同的值。
第一个区域=[0.511935,1.0771,0.613548,1.48839,0.445161,1.39161,1.03548,0.452903,3.07725,2.84613 0.701613,2.10581,2.47839,3。 84097,2.41065,1.38387]
第二个区域=[0.511935,1.0771,0.613548,1.48839,0.445161,1.39161,1.03548,0.452903,3.07725,2.84613,0.701613,2.10581,2.47839,3。 84097,2.41065,1.38387]
我确实在单独的脚本上进行了测试,它仍然给我相同的值。我确实检查了 map (之前构建的),这两个区域的值是不同的(12 月平均值)。
知道为什么吗?还有其他优雅的写法吗?谢谢。
最佳答案
我只是想指出Fir Nor的解决方案是不正确的(更新:fir Nor的帖子已被删除,它之前建议了一个基于使用np.mean的解决方案),因为你不能简单地使用算术在常规纬度/经度网格上处理空间数据时的平均值 (np.mean),就像此处的情况因为当您向两极移动时,网格单元大小会发生变化。
我还制作了一个未装箱的气候 youtube video on this topic解释为什么未加权均值不正确以及如何使用 CDO 计算空间统计数据。
<强>1。 CDO 解决方案:
最好不要担心这个并使用 CDO 进行操作:
cdo fldmean -sellonlatbox,98.5,100,4.5,6 3B42.1998.05.01.7A.nc boxav.nc
<强>2。 Python解决方案
如果你想用Python来做到这一点,你需要为你的子区域生成权重,可以根据你的解决方案(或使用xarray.where)提取权重。
如果您的纬度是一维,您可以使用 numpy.meshgrid 将其转换为二维数组
然后在二维数组上生成权重,并计算weighted average :
weights = np.cos(np.deg2rad(lat2d))
meanrain = numpy.average(pcpt, weights=weights)
关于python - 计算网格 netCDF 文件中选定区域中的变量平均值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22427954/
我有一个大小为 320x320 像素的阈值图像。我通过设置 ROI 以 20x20 像素的 block 循环遍历整个图像。我需要找到每个 block 的平均值。所以我将这些图像 block 传递给函数
我正在尝试学习 Javascript。我已经构建了以下代码来从一组数字中找到平均值。它有效除了最后返回的值总是 NaN。我不知道为什么。如果我将这 block 移到 block 外,它似乎完全忘记了变
假设我的数据已经分组,我该如何计算中位数和其他统计数据? Index Value Count 0 6 2 1 2 3 2 9 8 在上面
我试图计算的有趣情况。基本上在一行中,我有产品名称,其右侧的行是自首次收到产品以来经过的天数。 为 ex 计算的天数是 =TODAY()-BB2 我现在要做的是识别让我们说产品词“卡车”,然后计算卡车
我想知道如何计算某些数字的累积平均值。我将举一个简单的例子来描述我在寻找什么。 我有以下号码 vec 1) 为您的向量(或列表、一维数组或您如何称呼它)的每个元素评估此表达式,您将获得累积平均值。
我正在尝试对数据库表中的每一行进行平均。但它不能正常工作我想忽略该值,如果为空,它不会计算为零。使用我的代码,它将空值计算为零我想这样做 MS Excel 如果行/单元格为空,它将忽略。 Contro
我有以下信息(按 View 返回): DateTime ItemID UserTyp Seconds 2012-01-01 10 S 12 2012-01-01
我正在使用excel的average函数来获取欧洲各个城市一系列酒店价格的平均值。 =average(21,42,63,84,105) 我希望能够计算每个平均函数中的变量数量(例如,在上面的示例中有
我有一长串列,我想一次性计算非零中位数、平均值和标准差。我不能只删除基于 1 列的 0 行,因为同一列中另一列的值可能不是 0。 下面是我目前的代码,用于计算中位数、平均值等,包括零。 agg
这是我的问题: 我有一张这样的 table : Table Log int id; int time; timestamp DATE; int sid (FK to table Site);
JSON: [{"id":"1","user":"001","answer":"1,1,3,2,2,1,3,2"}, {"id":"2","user":"002","answer":"2,3,3,2,
有个问题: 使用适当的列名称,显示 obs 类型“CONT”的允许 ID 和平均 obs 值,其中 CONT 的平均 obs 值 >= 40。 假设承认是表1,观察是表2,但具有相同的主键Admit_
我有一个记录传感器数据的应用程序,我希望能够从多个传感器生成平均值,可以是一个、两个、三个或很多... 编辑:这些是温度传感器,因此 0 是传感器可能作为值存储在数据库中的值。 我最初的出发点是这个
我有这样一个数据框 id power flag 0 20 0 1 25 0 2 26 1 3 30 1 4 18 0 5
我想计算所有事件 blob 的平均位置。为此,首先我需要所有 X 和 Y 位置的总和。在这种情况下我该怎么做? contourFinder.findContours(grayImg, minB
我是一个十足的 Java 新手。上周一开始,之前从未用任何语言进行过任何编程。因此,如果我发现简单的事情变得复杂,请耐心等待。 我收到了一个文本文件。如下图: 第一个数据是时间(午夜过后的秒数),第二
我正在尝试为 Audacity 编写一个简单的测量插件,它就像用石头砸我的头骨一样有趣。我想要做的就是获取一段音频并找到所有样本的平均值(该 block 的 DC offset ),这样我就可以将它作
我正在尝试计算给定多边形内的值: 实际上我正在使用这个管道: 'aggregation': { 'pipeline': [ { "$match" : {
我有一个 pandas DataFrame,其中包含包含列表的列。我正在尝试获取此专栏中列表的方法。 这是我的 DataFrame 的示例: Loc Background 0
我尝试加速计算放置在数组中的4d向量的平均值。这是我的代码: #include #include #include #include #include #include typedef f
我是一名优秀的程序员,十分优秀!