我正在尝试计算下面的内容并在数组大小不相同时收到错误。我知道我可以手动为不同大小的数组执行此操作,但是您可以帮我更正此代码。
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
答案 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.]])
但是对于统计函数我不知道你希望它如何工作,这些排序需要相同长度的数组。您可能需要查阅这些文档。