爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 12405|回复: 1

[求助] Anaconda读取nc数据出现问题?三维数组之间的加法运算。

[复制链接]

新浪微博达人勋

发表于 2019-3-28 16:08:42 | 显示全部楼层 |阅读模式

登录后查看更多精彩内容~

您需要 登录 才可以下载或查看,没有帐号?立即注册 新浪微博登陆

x
本帖最后由 LemonTree007 于 2019-3-28 16:10 编辑
  1. import netCDF4
  2. import matplotlib.pyplot as plt
  3. import numpy as np
  4. from mpl_toolkits.basemap import Basemap
  5. from eofs.standard import Eof

  6. # read uwind
  7. nc_obj = netCDF4.Dataset('D:\\wind_u_v\\ERA\\u.mon.mean.1958.2016.nc', 'r')
  8. print(nc_obj.variables.keys())
  9. lon = nc_obj.variables['longitude'][:]
  10. lat = nc_obj.variables['latitude'][:]
  11. time = nc_obj.variables['time'][:]
  12. level = nc_obj.variables['level'][2]
  13. u = nc_obj.variables['u'][:, :, :]
  14. nc_obj.close()

  15. # 截取研究区域和时段u风数据
  16. lat_bounds = [-5, 40]
  17. lon_bounds = [80, 130]
  18. # latitude lower and upper index
  19. lat_li = np.argmin(np.abs(lat - lat_bounds[0]))  # argmin(array):返回范围内最小值的位置索引号
  20. lat_ui = np.argmin(np.abs(lat - lat_bounds[1]))
  21. # longitude lower and upper index
  22. lon_li = np.argmin(np.abs(lon - lon_bounds[0]))
  23. lon_ui = np.argmin(np.abs(lon - lon_bounds[1]))
  24. <b><font color="#008080">uSubset = u[:, lat_ui:lat_li, lon_li:lon_ui]</font></b>

  25. # 处理缺测数据
  26. u[u <= -32767] = np.nan

  27. # 计算u风夏季平均值
  28. u_JJA = np.zeros((59, lat_li-lat_ui, lon_ui-lon_li), dtype=np.float32)
  29. for i in range(59):
  30.      for j in range(5, 8):
  31.      u_JJA[i, :, :] = u_JJA[i, :, :] + uSubset[12*i+j, :, :]

  32.      u_JJA[i, :, :] = u_JJA[i, :, :]/3.
复制代码
Traceback (most recent call last):
  File "C:/Python_course/pygrads/test_eof.py", line 35, in <module>
    u_JJA[i, :, :] = u_JJA[i, :, :] + uSubset[12*i+j, :, :]
  File "C:\ProgramData\Anaconda3\lib\site-packages\numpy\ma\core.py", line 4077, in __radd__
    return add(other, self)
  File "C:\ProgramData\Anaconda3\lib\site-packages\numpy\ma\core.py", line 1019, in __call__
    result = self.f(da, db, *args, **kwargs)
ValueError: operands could not be broadcast together with shapes (18,20) (3,20,144)


大概明白是因为两个数组之间的维数不同无法进行运算,但感觉维数都是三维,一样的呀
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2019-3-28 16:34:05 | 显示全部楼层
找到问题所在了,代码13,14行,改成
level = nc_obj.variables['level']
u = nc_obj.variables['u'][:,2, :, :]
因为nc文件中的变量u是四维的,只能通过这样的方式固定level
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

Copyright ©2011-2014 bbs.06climate.com All Rights Reserved.  Powered by Discuz! (京ICP-10201084)

本站信息均由会员发表,不代表气象家园立场,禁止在本站发表与国家法律相抵触言论

快速回复 返回顶部 返回列表