当前位置: 首页 > news >正文

Python遥感开发之偏相关分析

1 什么是偏相关分析相关性分析用来反映要素之间的相关程度以相关系数表示NDVI/EVI/NPP/NEP等与气象气温和降水因素的相关性在简单相关分析的基础上固定某一要素计算另外两个要素间的相关性得出偏相关系数。大于0时正相关小于0时负相关。结合显著性P值可以得到显著正相关相关系数0 且 p值0.05不显著正相关相关系数0 且 p值≥0.05不显著负相关相关系数0 且 p值≥0.05显著负相关相关系数0 且 p值0.05偏相关分析公式如下2 代码实现逐像元偏相关分析 逐像元偏相关分析支持并行加速与显著性输出 - 输出4张栅格图偏相关 p值 https://mp.weixin.qq.com/s/dgZdeDpspc_nWfee09Ib5w importosimportnumpyasnpimportrasteriofromsklearn.linear_modelimportLinearRegressionfromscipy.statsimportpearsonrfromtqdmimporttqdmfrommultiprocessingimportPool,cpu_count# ─── 函数读取 TIF 文件───────────────────────────────────────defread_stack(folder):filessorted([os.path.join(folder,f)forfinos.listdir(folder)iff.endswith(.tif)])stack[]forpathintqdm(files,descos.path.basename(folder)):withrasterio.open(path)assrc:arrsrc.read(1).astype(np.float32)nodatasrc.nodataifnodataisnotNone:arr[arrnodata]np.nan stack.append(arr)stacknp.stack(stack)# (T, H, W)returnstack,src.meta.copy()# ─── 函数偏相关计算单像元 ─────────────────────────────defpartial_corr_with_p(x,y,z):x,y,zx.reshape(-1,1),y.reshape(-1,1),z.reshape(-1,1)validnp.isfinite(x[:,0])np.isfinite(y[:,0])np.isfinite(z[:,0])ifvalid.sum()3:returnnp.nan,np.nan x_resLinearRegression().fit(z[valid],x[valid]).predict(z[valid])y_resLinearRegression().fit(z[valid],y[valid]).predict(z[valid])r,ppearsonr((x[valid]-x_res).ravel(),(y[valid]-y_res).ravel())returnfloat(r),float(p)# ─── 函数处理单行像元用于并行 ─────────────────────────defprocess_one_row(args):i,NPP,TEM,PREargs _,_,WNPP.shape r_row_TEMnp.full(W,np.nan,dtypenp.float32)p_row_TEMnp.full(W,np.nan,dtypenp.float32)r_row_PREnp.full(W,np.nan,dtypenp.float32)p_row_PREnp.full(W,np.nan,dtypenp.float32)forjinrange(W):xNPP[:,i,j]y1TEM[:,i,j]y2PRE[:,i,j]# 跳过该像元如果任一变量完全为空if(np.isnan(x).all()ornp.isnan(y1).all()ornp.isnan(y2).all()):continue# 默认值为 nanr1,p1partial_corr_with_p(x,y1,y2)r2,p2partial_corr_with_p(x,y2,y1)r_row_TEM[j]r1 p_row_TEM[j]p1 r_row_PRE[j]r2 p_row_PRE[j]p2returni,r_row_TEM,p_row_TEM,r_row_PRE,p_row_PRE# ─── 并行执行偏相关分析 ─────────────────────────────────────defpixelwise_partial_corr_parallel(NPP,TEM,PRE,workersNone):T,H,WNPP.shape r_TEMnp.full((H,W),np.nan,dtypenp.float32)p_TEMnp.full((H,W),np.nan,dtypenp.float32)r_PREnp.full((H,W),np.nan,dtypenp.float32)p_PREnp.full((H,W),np.nan,dtypenp.float32)args[(i,NPP,TEM,PRE)foriinrange(H)]withPool(processesworkersorcpu_count())aspool:forresultintqdm(pool.imap_unordered(process_one_row,args),totalH,desc Parallel Rows):i,r_row_TEM,p_row_TEM,r_row_PRE,p_row_PREresult r_TEM[i,:]r_row_TEM p_TEM[i,:]p_row_TEM r_PRE[i,:]r_row_PRE p_PRE[i,:]p_row_PREreturn(r_TEM,p_TEM),(r_PRE,p_PRE)# ─── 函数保存 GeoTIFF ─────────────────────────────────────defsave_raster(data,path,meta):meta.update(count1,dtypefloat32,nodatanp.nan)withrasterio.open(path,w,**meta)asdst:dst.write(data,1)# ─── 主执行流程 ──────────────────────────────────────────────if__name____main__:NDVI_dirrE:\AAWORK\20260310\data-裁剪02TEM_dirrE:\AAWORK\20260310\tem-裁剪02PRE_dirrE:\AAWORK\20260310\pre-裁剪02result_dirrE:\AAWORK\20260310\resultsprint( 正在加载数据...)NDVI,metaread_stack(NDVI_dir)TEM,_read_stack(TEM_dir)PRE,_read_stack(PRE_dir)print( 开始并行偏相关计算...)(r_TEM,p_TEM),(r_PRE,p_PRE)pixelwise_partial_corr_parallel(NDVI,TEM,PRE,workers12)print( 正在保存结果...)save_raster(r_TEM,os.path.join(result_dir,partial_corr_NDVI_TEM.tif),meta)save_raster(p_TEM,os.path.join(result_dir,pvalue_NDVI_TEM.tif),meta)save_raster(r_PRE,os.path.join(result_dir,partial_corr_NDVI_PRE.tif),meta)save_raster(p_PRE,os.path.join(result_dir,pvalue_NDVI_PRE.tif),meta)print(✅ 分析完成输出保存在:,result_dir)3 结合显著性P值得到四分类代码# coding:utf-8importnumpyasnpimportpymannkendallasmkimportosfromosgeoimportgdal,gdalnumericdefread_tif(filepath):datasetgdal.Open(filepath)coldataset.RasterXSize# 图像长度rowdataset.RasterYSize# 图像宽度geotransdataset.GetGeoTransform()# 读取仿射变换projdataset.GetProjection()# 读取投影datadataset.ReadAsArray()# 转为numpy格式datadata.astype(np.float32)no_data_valuedata[0][0]# 设定NoData值data[datano_data_value]np.nan# 将NoData转换为NaNreturncol,row,geotrans,proj,datadefsave_tif(data,reference_file,output_file):dsgdal.Open(reference_file)shapedata.shape drivergdal.GetDriverByName(GTiff)datasetdriver.Create(output_file,shape[1],shape[0],1,gdal.GDT_Int16)# 保存的数据类型dataset.SetGeoTransform(ds.GetGeoTransform())dataset.SetProjection(ds.GetProjection())dataset.GetRasterBand(1).WriteArray(data)dataset.FlushCache()defread_tif02(file):datagdalnumeric.LoadFile(file)datadata.astype(np.float32)adata[0][0]data[dataa]np.nanreturndata 分类方法说明 分类基于以下标准显著性水平α0.05 显著正相关相关系数0 且 p值0.05 不显著正相关相关系数0 且 p值≥0.05 不显著负相关相关系数0 且 p值≥0.05 显著负相关相关系数0 且 p值0.05 if__name____main__:# 输入文件夹路径partial_filerE:\AAWORK\20260310\results\partial_corr_NDVI_TEM.tifpvalue_filerE:\AAWORK\20260310\results\pvalue_NDVI_TEM.tifout_filerE:\AAWORK\20260310\resultscol,row,geotrans,proj,partial_dataread_tif(partial_file)pvalue_dataread_tif02(pvalue_file)classifiednp.zeros_like(partial_data,dtypenp.int16)classified[(partial_data0)(pvalue_data0.05)]1classified[(partial_data0)(pvalue_data0.05)]2classified[(partial_data0)(pvalue_data0.05)]3classified[(partial_data0)(pvalue_data0.05)]4# 输出文件路径save_tif(classified,partial_file,os.path.join(out_file,partial_pvalue_corr_NDVI_TEM.tif))print(Processing completed!)
http://www.gsyq.cn/news/1374713.html

相关文章:

  • LLM应用开发之向量数据库详解
  • 从原理到调参:手把手教你用OpenCV玩转Canny边缘检测(Python代码详解)
  • 半导体供应链展会详解,打通上下游供货交易渠道 - 品牌2025
  • 足底压力数据异常检测:SPM统计方法与可解释机器学习对比实践
  • 小学期作业设计2.0
  • 别让Sonoma动态壁纸‘偷’走你的空间:一个Finder快捷键 + 隐藏路径的完整避坑指南
  • 从数据到决策:构建高精度电信客户流失预测模型的实战指南
  • 肺结节体积计算:从球形近似到非线性回归的三种手动方法详解
  • C++中的bind实践代码
  • D-S2HARE:动态对抗响应式隐私攻击的机器学习模型安全共享防御框架
  • 基于IC动态加权的机器学习多因子选股策略:从模型融合到实战回测
  • 半导体行业展会怎么挑选,适配企业参展的实用指南 - 品牌2025
  • 低代码开发的招聘管理系统实际运行数据和效果究竟如何?
  • NsEmuTools:终极NS模拟器自动化管理完整指南
  • 物理信息机器学习:融合物理定律与数据,革新燃烧模拟与优化
  • 重赏之下必有勇夫的科学依据找到了:《Science》发现超级大奖励可“开挂”学习,多巴胺是幕后功臣
  • 粒子物理分析中类别权重对机器学习分类器性能与物理结果的影响
  • GDRE Tools实战指南:Godot PCK逆向与GDScript反编译工作流
  • Unity程序集打包复用指南:如何将你的通用工具代码做成一个可移植的.dll文件
  • 2026年4月观光车厂家推荐,消防巡逻车/安保巡逻车/电动消防车/场内观光车/8座电动巡逻车/巡逻车,观光车品牌有哪些 - 品牌推荐师
  • codex+claudecode+ccswitch+gpt5.5一键部署工具
  • Unity C# Partial类实战:解耦大型项目架构的核心技术
  • HPE DL560 Gen10服务器装系统踩坑实录:Windows Server 2012 R2下P816i-a SR阵列卡驱动安装全流程
  • iOS越狱环境构建:Frida动态分析链路全栈配置指南
  • Unity WebGL打包后浏览器报错?手把手教你解决‘Unable to parse .gz’文件解析问题(附服务器配置思路)
  • 统信UOS 1070系统盘满了别慌!手把手教你用自带工具做全盘备份(附还原实战)
  • 告别命令行恐惧:用XManager 7远程连接Ubuntu 22.04桌面,像操作本地电脑一样丝滑
  • Unity Package Manager Loading Packages卡死原因与解决方案
  • JMeter性能压测实战:从环境配置到瓶颈归因的完整链路
  • 多极球谐函数:统一机器学习势函数描述符的数学基石