Python TypeError:+;的操作数类型不受支持:';发电机&x27;和';发电机&x27;添加numpy数组时
我正在编写一个函数,将list1和list2转换为数组,并返回每个列表元素平方和的numpy数组Python TypeError:+;的操作数类型不受支持:';发电机&x27;和';发电机&x27;添加numpy数组时,python,numpy,Python,Numpy,我正在编写一个函数,将list1和list2转换为数组,并返回每个列表元素平方和的numpy数组 list_1 = [1,2,3] list_2 = [1,2,3] import numpy as np def array_sum(list_1, list_2): assert len(list_1) == len(list_2), "both args must have the same number of elements" l1 = np
list_1 = [1,2,3]
list_2 = [1,2,3]
import numpy as np
def array_sum(list_1, list_2):
assert len(list_1) == len(list_2), "both args must have the same number of elements"
l1 = np.array(list_1)
l2 = np.array(list_2)
return (x**2 for x in l1) + (y**2 for y in l2)
array_sum(list_1,list_2)
我遇到此错误:+:“generator”和“generator”的操作数类型不受支持
后来我尝试了另一种方法返回np.power(l1,2)+np.power(l2,2)
,它是有效的,但我不确定返回语句的原始代码哪里出错了(l1中x**2代表x)是一个生成器,添加生成器没有任何意义。使用列表([x**2代表l1中的x]+[y**2代表l2中的y]
)将消除错误,但不会提供所需的输出,因为它将连接两个列表
相反,您可以简单地利用numpy矢量化,只需
return l1 ** 2 + l2 ** 2
当将其合并到您的代码中时,将返回数组
[2 8 18]
(基本上相当于您的np.power(l1,2)+np.power(l2,2)
尝试)。由于您正在转换为NumPy数组,您可以利用NumPy广播而无需使用循环。哪个更有效
list_1 = [1, 2, 3]
list_2 = [1, 2, 3]
def array_sum(list_1, list_2):
assert len(list_1) == len(list_2), "both arguments must have the same number of elements"
l1 = np.array(list_1)
l2 = np.array(list_2)
return (l1 **2, l2**2)
(x**2表示l1中的x)
和(y**2表示l2中的y)
是生成器,因此是错误。您想要实现什么?在Python中,[x for x In…]
是一个列表理解,生成一个列表。用()
编写的同样的东西是生成器表达式
,它设置相同的迭代,但实际上并不运行它<代码>()也可用于分组计算,如(a+b)*c
。不要混淆两者。