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向量并输出数字。
答案 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')