我写了一个函数来寻找值之间的相关性,如果x是一个值为1,2,3,4的列表,那么我必须找到所有可能的组合之间的相关性;笛卡尔积。在import numpy as np
def myfunc(x,y):
if x==y:
return 0.0
else:
return (max(np.exp(-.03*(abs(x-y)/min(x,y))),0.4))
func= np.vectorize(myfunc)
x=[1,2,3,4]
y=[1]
func(x,y)
结果是
^{pr2}$
我可以创建一个从1到4的Y值循环,得到4个数组输出,这将给我我需要的结果。但是,我希望避免一个循环,并在函数中同时传递X=[1,2,3,4]和Y=[1,2,3,4],这给了我x=[1,2,3,4]
y=[1,2,3,4]
array([ 0., 0., 0., 0.])
我知道在x和y列表值之间有1比1的比较,根据我的函数,结果是0。我的第一个问题是,当我只传递1y值y=[1]时,它会计算与x的所有4个值的相关性,但当我传递多个y值时,它不会执行相同的操作。我在这里遗漏了什么吗?在
我重新创建了我的函数,使用生成器在我的两个列表输入的函数中做叉积,但是它给了我一个我无法解码的错误。请检查我的代码。在def myfunc(x,y):
gen= ((a, b) for a in x for b in y)
for u, v in gen:
if u==v:
return 0.0
else:
return (max(np.exp(-.03*(abs(u-v)/min(u,v))),0.4))
func= np.vectorize(myfunc)
x=[1,2,3,4]
y=[1,2,3,4]
func(x,y)
File "", line 2, in myfunc
gen= ((a, b) for a in x for b in y)
TypeError: 'numpy.int32' object is not iterable