ValueError:操作数无法与形状一起广播(3,)(6,)

时间:2017-07-16 22:18:43

标签: python arrays numpy scipy

我正在尝试计算下面的内容并在数组大小不相同时收到错误。我知道我可以手动为不同大小的数组执行此操作,但是您可以帮我更正此代码。

import scipy
from scipy.stats import pearsonr, spearmanr
from scipy.spatial import distance
x = [5,3,2.5]
y = [4,3,2,4,3.5,4]
pearsonr(x,y)
:Error
scipy.spatial.distance.euclidean(x, y)
:Error
spearmanr(x,y)
:Error
scipy.spatial.distance.jaccard(x, y)
:Error

1 个答案:

答案 0 :(得分:1)

对于距离,数组的大小必须为2,即使每个子数组只包含一个元素,例如:

def make2d(lst):
    return [[i] for i in lst]

>>> scipy.spatial.distance.cdist(make2d([5,3,2.5]), make2d([4,3,2,4,3.5,4]))
array([[ 1. ,  2. ,  3. ,  1. ,  1.5,  1. ],
       [ 1. ,  0. ,  1. ,  1. ,  0.5,  1. ],
       [ 1.5,  0.5,  0.5,  1.5,  1. ,  1.5]])

您可以选择其他指标(例如jaccard):

>>> scipy.spatial.distance.cdist(make2d([5,3,2.5]), make2d([4,3,2,4,3.5,4]), metric='jaccard')
array([[ 1.,  1.,  1.,  1.,  1.,  1.],
       [ 1.,  0.,  1.,  1.,  1.,  1.],
       [ 1.,  1.,  1.,  1.,  1.,  1.]])

但是对于统计函数我不知道你希望它如何工作,这些排序需要相同长度的数组。您可能需要查阅这些文档。