爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 10848|回复: 3

[求助] 尝试EOF分析时遇到问题

[复制链接]

新浪微博达人勋

发表于 2019-10-21 21:13:04 | 显示全部楼层 |阅读模式

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

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

x

根据气象家园之前发的帖子,自己尝试用Python做EOF分析,但出现

  File "E:/PythonScripts/sstEOF.py", line 40, in <module>
    solver = Eof(sst_ann, weights=wgts)
  File "D:\Program\Anaconda3\lib\site-packages\eofs\standard.py", line 136, in __init__
    raise ValueError('weight array dimensions are incompatible')

ValueError: weight array dimensions are incompatible
本人是菜鸟,不知道出现了什么问题,还望大佬指教。

复制代码


密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2019-10-21 21:15:31 | 显示全部楼层
  1. import matplotlib.pyplot as plt
  2. import numpy as np
  3. from eofs.standard import Eof
  4. from eofs.examples import example_data_path
  5. from netCDF4 import Dataset

  6. filename = example_data_path('F:/School/NCEPNCAR/SST/sst.mnmean.nc')
  7. ncin = Dataset(filename, 'r')

  8. lon = ncin.variables['lon'][:]
  9. lat = ncin.variables['lat'][:]
  10. time = ncin.variables['time'][:]
  11. sst = ncin.variables['sst'][1201:1800,:,:]
  12. ncin.close()

  13. lat_bounds = [-30, 30]
  14. lon_bounds = [100, 270]

  15. lat_li = np.argmin(np.abs(lat - lat_bounds[0])) #
  16. lat_ui = np.argmin(np.abs(lat - lat_bounds[1]))
  17. # longitude lower and upper index
  18. lon_li = np.argmin(np.abs(lon - lon_bounds[0]))
  19. lon_ui = np.argmin(np.abs(lon - lon_bounds[1]))
  20. sstSubset = sst[:, lat_ui:lat_li, lon_li:lon_ui]

  21. sst[sst <=-9.96921e+36 ] = np.nan

  22. #计算sst年均
  23. sst_ann = np.zeros((49, lat_li-lat_ui, lon_ui-lon_li), dtype=np.float32)
  24. for i in range(0, 49):
  25.     for j in range(0, 11):
  26.         sst_ann[i,:, :] = sst_ann[i,:, : ] + sstSubset[12*i+j,:,:]
  27.     sst_ann[i,:, :] = sst_ann[i,:, :]/12.

  28. lats = np.linspace(-30, 30, 60, endpoint=False)
  29. lons = np.linspace(100, 270, 85, endpoint=False)
  30. coslat = np.cos(np.deg2rad(lats[:]))
  31. wgts = np.sqrt(coslat)[..., np.newaxis]
  32. solver = Eof(sst_ann, weights=wgts)
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2019-10-22 08:12:32 | 显示全部楼层
还不太会python。可能是sst_ann的维度中没有和wgts维度匹配的,你可以print(wgts.shape)和print(sst_ann.shape),看看是不是这个方面出问题了。
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2019-10-22 09:11:30 | 显示全部楼层
cookie-o-o 发表于 2019-10-22 08:12
还不太会python。可能是sst_ann的维度中没有和wgts维度匹配的,你可以print(wgts.shape)和print(sst_ann.sh ...

已解决,谢谢
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

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