Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 带代价函数的numpy等值线图_Python_Numpy_Contour - Fatal编程技术网

Python 带代价函数的numpy等值线图

Python 带代价函数的numpy等值线图,python,numpy,contour,Python,Numpy,Contour,嗨,我想用两个参数的代价函数画一个等高线图,包括矩阵乘法。我已经测试了成本函数,它在交互式会话中正常工作。但是,在linspace上运行它会导致出现错误“ValueError:对象未对齐”。我现在明白了,这与我如何构造P,Q有关。解决方案是否需要编写一个for循环来显式地获得一个输出数组?我该怎么写呢 编辑:a、b是大小正确的矩阵。成本函数采用2向量并输出一个数字 如果手头没有a和b的形状,很难准确地知道,但是这个错误可能是由于np.array[p,Q]是一个三维数组造成的。似乎您希望它是二维的

嗨,我想用两个参数的代价函数画一个等高线图,包括矩阵乘法。我已经测试了成本函数,它在交互式会话中正常工作。但是,在linspace上运行它会导致出现错误“ValueError:对象未对齐”。我现在明白了,这与我如何构造P,Q有关。解决方案是否需要编写一个for循环来显式地获得一个输出数组?我该怎么写呢


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

如果手头没有a和b的形状,很难准确地知道,但是这个错误可能是由于
np.array[p,Q]
是一个三维数组造成的。似乎您希望它是二维的,并且
np.dot(a,θ)
执行矩阵乘法

您可能希望
theta
成为特定x和y值处的角度坐标。在这种情况下,你应该这样做

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 )

你到底期望np.dot(a,np.array([P,Q])是什么。我想这是你的第一个问题。此外,请提供一个可复制的示例。也就是说,什么是
x
y
?。成本是计算(b-atheta)^T(b-a*theta),基本上是30x1矩阵的范数平方。问题似乎是,我不能仅仅将[P,Q]输入到输入中,而不像做P^2,Q^2,例如,将这些数组中的所有条目平方。
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')