形状不匹配:形状的值数组(2,)无法广播到形状的索引结果(1,)

时间:2017-10-23 13:18:46

标签: python numpy matplotlib

我使用taylor diagram编写了以下脚本来创建SkillMetrics,这是一个开源Python库,用于计算针对观察的模型预测。

我写的剧本是:

import skill_metrics as sm 

# Arrange datasets in array
stats1 = np.array([ref,m1])
stats2 = np.array([ref,m2])
stats3 = np.array([ref,m3])

# calculating statistics
taylor_stats1 = sm.taylor_statistics(stats1[0],stats1[1])
taylor_stats2 = sm.taylor_statistics(stats2[0],stats2[1])
taylor_stats3 = sm.taylor_statistics(stats3[0],stats3[1])

# Store statistics in arrays
sdev = np.array([taylor_stats1['sdev'][0], taylor_stats1['sdev'][1],
                 taylor_stats2['sdev'][1], taylor_stats3['sdev'][1]])
crmsd = np.array([taylor_stats1['crmsd'][0], taylor_stats1['crmsd'][1],
                  taylor_stats2['crmsd'][1], taylor_stats3['crmsd'][1]])
ccoef = np.array([taylor_stats1['ccoef'][0], taylor_stats1['ccoef'][1],
                  taylor_stats2['ccoef'][1], taylor_stats3['ccoef'][1]])

产生:

sdev = array([ 0.02556107,  0.06264893,  0.06264893,  0.06264893])

crmsd = array([ 0.        ,  0.04918169,  0.04824091,  0.05082715])
ccoef = array([ 1.        ,  0.67423927,  0.68388202,  0.64162831])

然后我运行以下内容来创建泰勒图:

sm.taylor_diagram(sdev,crmsd,ccoef)

然而,我收到了这个错误:

shape mismatch: value array of shape (2,) could not be broadcast to indexing result of shape (1,)

1 个答案:

答案 0 :(得分:1)

这是一个python 2问题。似乎:- use_module(library(clpfd)). add([],[]). add([H|T],[H|[1|T1]]):- 0 #= H mod 2, add(T,T1). add([H|T],[H|T1]):- 0 #\= H mod 2, add(T,T1).仅用于python 3.错误来自包的来源,你在这里没有做错任何事。

在python3中the line in question应该只发出警告,而不是错误。

你唯一的机会可能是使用python 3或潜入源代码。

  • 找到文件skill_metrics package
  • 在此文件中,找到行(应该在第50行附近)

    site-packages\skill_metrics\overlay_taylor_diagram_circles.py
  • 替换它们
    # now really force points on x/y axes to lie on them exactly
    inds = range(0,len(th),(len(th)-1) // 4)
    xunit[inds[1:3:2]] = np.zeros(2)
    yunit[inds[0:4:2]] = np.zeros(3)