Python TypeError:+;的操作数类型不受支持:';发电机&x27;和';发电机&x27;添加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

我正在编写一个函数,将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.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
。不要混淆两者。