具有成本函数的numpy等高线图

时间:2015-09-21 07:38:51

标签: python numpy contour

a = np.array(x)
b = np.array(y)

a_transpose = a.transpose()
a_trans_times_a = np.dot(a_transpose,a)
a_trans_times_b = np.dot(a_transpose,b)

def cost(theta):

    x_times_theta = np.dot(a, theta) 
    _y_minus_x_theta = b - x_times_theta
    _y_minus_x_theta_transpose = _y_minus_x_theta.transpose()
    return np.dot(_y_minus_x_theta_transpose, _y_minus_x_theta)


n = 256
p = np.linspace(-100,100, n)
q= np.linspace(-100,100, n)
P, Q = np.meshgrid(p,q)
pl.contourf(P, Q, cost(np.array([P,Q])) ,8, alpha =0.75, cmap = 'jet')
C = pl.contour(P,Q, cost(np.array([P,Q])), 8, colors = 'black', linewidth = 0.5 )

嗨,我正在尝试使用两个参数的成本函数制作等高线图,包括矩阵乘法。我测试了成本函数,它在交互式会话中正常工作。但是,在linspace上运行它会使它出现错误“ValueError:对象未对齐”。我现在明白它与我如何构造P,Q有关。该解决方案是否涉及编写for循环以显式获取输出数组?我怎么写这个?

编辑:a,b是具有正确大小的矩阵。成本函数采用2向量并输出数字。

1 个答案:

答案 0 :(得分:1)

如果没有a和b的形状,很难确切地知道,但这个错误可能是由np.array[P,Q]是一个三维数组引起的。您似乎期望它是2维的并且np.dot(a,theta)执行矩阵乘法。

大概你希望theta成为特定x和y值的角坐标。在这种情况下你应该做

theta = np.arctan2(Q,P)  #this is a 2D array of theta coordinates
costarray = cost(theta)  
pl.contourf(P,Q,costarray,8,alpha=0.75,cmap='jet')