Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >python中赋值以及平均值计算的两个小坑

python中赋值以及平均值计算的两个小坑

作者头像
自学气象人
发布于 2022-10-09 02:00:16
发布于 2022-10-09 02:00:16
2.1K00
代码可运行
举报
文章被收录于专栏:自学气象人自学气象人
运行总次数:0
代码可运行

以下全文代码和数据均已发布至和鲸社区,复制下面链接或者阅读原文前往,可一键fork跑通:

https://www.heywhale.com/mw/project/62f9033c738412246370ef04

前不久在测试python代码的时候,我发现了两个不容易被人关注到的小坑(也有可能是我没注意到,哈哈哈)。这里给大家浅浅地分享一下,一起避雷了!

一、python中的“=”、“numpy.copy”、“copy.deepcopy”

这个是关于在python中赋值的小坑,给大家看看下面的几个例子,大家应该就明白了。

我们先来建立一个初始数组a,然后分别用这三种方法来进行赋值。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import numpy as np
import copy as cp

a = np.array([9,'自学气象人',[1,2,3],[997,998,999]])
b = a
c = np.copy(a)
d = cp.deepcopy(a)

print('a',a)
print('b',b)
print('c',c)
print('d',d)

现在,我们先来改变d中的三个元素的值,看看初始数组a会不会发生变化。可以看到,改变采用copy.deepcopy()方法赋值的d数组中的数值,完全不会影响到初始数组a的值。即copy.deepcopy()方法是深复制(完全的复制了)。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
print('改变前的a',a)
print('改变前的d',d)
d[0] = -1
d[1] = '好好学习'
d[2] = ['天天向上']
d[3][1] = 1000
print('改变后的d',d)
print('改变后的a',a)

接着,我们再来改变c中的三个元素的值,看看初始数组a会不会发生变化。可以看到,改变采用numpy.copy()方法赋值的c数组中的数值,会部分影响到初始数组a中的值。这仅发生于我们改变初始数组a中的列表中的元素(改变整个列表则不会影响初始数组a),也即numpy.copy()方法无法复制其作用数组中所包含对象内的元素,属于浅复制。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
print('改变前的a',a)
print('改变前的c',c)
c[0] = -1
c[1] = '好好学习'
c[2] = ['天天向上']
c[3][1] = 1000
print('改变后的c',c)
print('改变后的a',a)

最后,我们来看一下改变b中的三个元素的值,看看初始数组a会不会发生变化。可以看到,改变采用 “=” 方法赋值的b数组中的数值,会完全地影响到初始数组a中的值。即对b进行的操作会完全地同步到初始数组a上。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
print('改变前的a',a)
print('改变前的b',b)
b[0] = -1
b[1] = '好好学习'
b[2] = ['天天向上']
b[3][1] = 1000
print('改变后的b',b)
print('改变后的a',a)

二、python中的“np.nanmean”、“xarray.mean”

这个呢,是python中求平均值的小坑(当计算的数据中存在nan值时会出现)。同样给大家看看下面几个例子,一起来具体地感受一下。

首先我们来创建个dataset,其中有一个nan值(缺省值)。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import xarray as xr 
import numpy as np
import pandas as pd

data = np.array([[1, np.nan,  2],
                 [3, 4, 5]])

da = xr.DataArray(
    data,
    [
        ("lat", np.array([10,11])),
        ("lon", np.array([1,2,3]))],
)


ds = da.to_dataset(name="temp")
ds['temp']

接着我们先来看一下正确计算的平均值是多少(也就是这五个数加起来的平均值)。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
(1+2+3+4+5) / 5

当我们使用numpy.nanmean()方法计算时,可以看到是正确的结果。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
np.nanmean(ds['temp'])

当我们使用xarray.mean()方法并同时输入两个维度“lat”“lon”计算时,可以看到是正确的结果。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ds['temp'].mean(dim=['lat','lon'])

当我们使用xarray.mean()方法并先对维度“lon”计算平均,再对维度“lat”计算平均时,可以看到结果偏离了正确的均值。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ds['temp'].mean(dim=['lon']).mean(dim=['lat'])

上面这种分步计算的方法等价于下面的计算。即由于存在nan值,所以计算时候分母发生了变化,导致分步计算的结果与正确计算结果之间出现偏差。如果没有nan值的话,这几种计算方法得到的结果就会一致。

大家也可以试试先计算“lat”再计算“lon”,结果也不会是3.0。这个问题在我们求区域平均时候要十分注意,切记检查是否有nan值,并据此选择合适的均值计算方法。

以上就是本文的全部内容。如有不妥之处,还望各位指正!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-08-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 自学气象人 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
基于python掩膜获取WRF所模拟的三江地区温度的平均值
目的:应武大-气候的一位同学写的一个小功能的函数 原始 掩膜后 第一步导入需要的两个库 import shapefile from matplotlib.path import Path 第二步读
郭好奇同学
2021/07/30
1.4K0
基于python掩膜获取WRF所模拟的三江地区温度的平均值
PCA系列(二):数据(.data)处理
在数据挖掘的很多领域,数据内容往往以.data形式给出,因此读取.data文件到矩阵中并对异常值进行处理就变得很重要了。  
Cyril-KI
2022/07/29
6400
PCA系列(二):数据(.data)处理
网格重采样工具对决:xarray-regrid  vs xemsf
气象领域的插值方案是江山辈有才人出,那么我们今天来看看新鲜的插值库xarray-regrid
用户11172986
2025/06/19
1180
网格重采样工具对决:xarray-regrid  vs xemsf
Python气象绘图教程—(十九)剖面图
提要中提到的这几种图形都是在气象上比较常用的,地形剖面主要研究地貌对降雨、气流的影响作用;纬度高度剖面图可以用来分析降雨的某些条件,如湿层深厚、上干下湿、风向风速等;时间纬度图研究某个固定经度上的值随时间的演变(这是和大气环流一般自西向东相匹配的,所以时间经度图比较少见)。
bugsuse
2020/10/09
15.9K1
Python气象绘图教程—(十九)剖面图
可视化 | 台风方位角平均的半径-气压剖面图
前面的项目使用metpy将台风数据插值转换为极坐标系中,介绍了如何利用metpy完成将台风数据从笛卡尔坐标系转化成极坐标系的插值操作。
郭好奇同学
2022/11/15
1.7K1
可视化 | 台风方位角平均的半径-气压剖面图
meteva,这可能是气象萌新最需要的python库
本文内容参考meteva官方文档: https://www.showdoc.com.cn/meteva/ 面向群体:拿着micaps数据却不知如何读取与绘图的小白 初衷:向广大气象学子介绍meteva库的用途,达到降低micaps门槛的目的,主打“我淋过雨我撑伞” 应用场景:比如说组会前赶图(
用户11172986
2024/06/20
2.4K0
meteva,这可能是气象萌新最需要的python库
用Python绘制《天气学原理和方法》插图
最近天气学原理需要绘制课本插图来做 翻转课堂,因此整理了课本第四章几个典型图片的画法和代码,共需要的人使用。
气象学家
2022/01/18
1.9K0
用Python绘制《天气学原理和方法》插图
GPM 卫星三级产品的简单可视化
之前GPM数据写了下载教程,现在简单试试可视化,毕竟是nc格式数据(下载可选),用起来相对简单
用户11172986
2024/06/20
2300
GPM 卫星三级产品的简单可视化
气象常用库 | xarray入门用法总结
5.使用给出的index,columns分别设定为lat,lon的DataFrame,创建一个DataArray
自学气象人
2022/11/14
3.8K0
Python NumPy异常处理设计与实现
在数据处理和科学计算中,异常值、无效操作或计算错误是不可避免的问题。NumPy 作为 Python 科学计算的核心库,提供了丰富的异常处理机制,能够帮助开发者有效应对如 NaN 值、无效算术操作(如零除)以及其他数据异常情况。
sergiojune
2024/12/19
3590
Python NumPy异常处理设计与实现
python 平均值/MAX/MIN值 计算从入门到精通「建议收藏」
1、最大值、最小值 max:获取一个数组中最大元素 min:获取一个数组中最小元素
全栈程序员站长
2022/09/08
2.1K0
气象大模型论文中评估指标的计算详解
参考:https://github.com/xiazh18/WeatherBench/blob/master/src/score.py
自学气象人
2023/09/05
9290
气象大模型论文中评估指标的计算详解
wrf-python 详解之如何使用
近几年,python在气象领域的发展也越来越快,同时出现了很多用于处理气象数据的python包。比如和NCL中的 WRF_ARWUser库类似的 wrf-python模块。
bugsuse
2020/04/20
21.7K0
python中纬向平均、经向平均、水平流场、水汽柱浓度计算、坐标刻度朝向、label上下角标示例
一次课程作业画图的code记录。 import pandas as pd import numpy as np import xarray as xr from wrf import to_np,interpz3d,destagger import glob import matplotlib.pyplot as plt import cartopy.crs as ccrs import cartopy.feature as cfeature from cartopy.mpl.ticker import
自学气象人
2022/11/14
1.6K2
python中纬向平均、经向平均、水平流场、水汽柱浓度计算、坐标刻度朝向、label上下角标示例
利用griddata进行插值
因为最近在做算法优化,所以对数据统一性有一定要求,在最近的研究中主要用一个简单的最近邻插值对数据集进行降尺度处理。 主要运用到的函数时scipy里面的 griddata
全栈程序员站长
2022/08/24
9660
利用griddata进行插值
NumPy 秘籍中文第二版:十一、最新最强的 NumPy
自《NumPy 秘籍》第一版以来,NumPy 团队引入了新功能; 我将在本章中对其进行描述。 您可能不太可能阅读本书的第一版,而现在正在阅读第二版。 我在 2012 年撰写了第一版,并使用了当时可用的功能。 NumPy 具有许多功能,因此您不能期望涵盖所有功能,但是我在本章中介绍的功能相对重要。
ApacheCN_飞龙
2023/04/17
1K0
NumPy 秘籍中文第二版:十一、最新最强的 NumPy
Python气象数据处理与可视化
在当今数据驱动的时代,气象数据的获取、处理和可视化已成为气象科学研究和业务应用中不可或缺的环节。Python作为一种功能强大且灵活的编程语言,已经在气象数据处理和可视化领域展现出了巨大的潜力。它不仅提供了丰富的库和工具,如`matplotlib`和`cartopy`,用于数据的科学绘图与可视化,还支持多种数据格式的处理,如`NetCDF`、`GRIB`、`HDF`。此外,Python还能够高效地下载和预处理气象数据,例如利用`cdsapi`和`IDM`批量下载`ERA5`数据。
阿巴阿巴-
2025/03/10
6080
使用metpy将台风数据插值转换为极坐标系
研究台风的同学们应该都接触过需要计算以台风为中心的方位角平均物理量,这就需要将笛卡尔坐标系中的数据插值到极坐标系,再对各个方位角的数据进行平均。
郭好奇同学
2022/11/15
2.5K0
使用metpy将台风数据插值转换为极坐标系
读者答疑 | python怎么计算流函数
由于可视化代码过长隐藏,可点击运行Fork查看 若没有成功加载可视化图,点击运行可以查看 ps:隐藏代码在【代码已被隐藏】所在行,点击所在行,可以看到该行的最右角,会出现个三角形,点击查看即可
用户11172986
2024/08/29
4410
读者答疑 | python怎么计算流函数
数据处理 | xarray的计算距平、重采样、时间窗
现代气候学认为在相当长的时间段(一般认为是 30 年)中,变量多年平均是一个稳定的值。因此在一个时间段中,如果能够充分认识变量随平均状态的变化趋势,那么对于预测未来情况是非常有利的。那么这个所谓随着平均态的偏移值便可称为距平(异常,anomaly).
郭好奇同学
2021/05/28
11.9K1
数据处理 | xarray的计算距平、重采样、时间窗
推荐阅读
相关推荐
基于python掩膜获取WRF所模拟的三江地区温度的平均值
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档