如何使用生成器初始化numpy数组?

Ros*_*Liu 3 python numpy

代码如下:

def computerCost(x,y,theta):
    m = len(y)
    J = np.sum((np.dot(x,theta) - y)**2) /(2*m)
    return J

m = 100
x = np.linspace(-5,10,m)
y = np.linspace(1,100,m)
x, y = x.reshape(m,1), y.reshape(m,1)
theta_0 = np.linspace(-10,10,100)
theta_1 = np.linspace(-1,4,100)
X,Y = np.meshgrid(theta_0,theta_1)

###### Here I want to initialize a numpy array with generator.
J_vals = np.array(computerCost(x,y,np.array([a,b])) for a,b in zip(np.ravel(X), np.ravel(Y)) )

print('out:',J_vals)
Run Code Online (Sandbox Code Playgroud)

在Python 3.5中运行此代码给出:

out:<generator object <genexpr> at 0x0000028ACF28B258>
Run Code Online (Sandbox Code Playgroud)

控制台打印出J_vals是一个生成器.有没有办法将发电机改成np.ndarrray

Pra*_*een 6

你在找np.fromiter.

这是一个更简单的例子来演示它是如何工作的:

>>> a = [1, 2, 3]
>>> b = [4, 5, 6]
>>> np.fromiter((i + j for (i, j) in zip(a, b)), np.float)
array([ 5.,  7.,  9.])
Run Code Online (Sandbox Code Playgroud)

请注意,您必须提供数据类型作为第二个参数,并且生成器表达式必须括在括号中,因为它不是唯一的参数.

当我用你的示例代码尝试这个时,我得到一个错误,说形状没有对齐......我猜这是点产品的问题.