使用matplotlib绘制轮廓时出错

时间:2018-12-30 16:02:37

标签: python numpy matplotlib

我正在尝试绘制这样的函数。但是,以下代码将导致错误。我认为原因是norm ()中返回了标量值,但是如何解决呢?function

图像的标签代表定义公式,搜索空间,从左开始的最佳解决方案

import numpy as np
import matplotlib.pyplot as plt

x = np.arange(-5, 5, 0.05) 
y = np.arange(-5, 5, 0.05) 

X ,Y= np.meshgrid(x, y)
print(X)
c1 = -2 * np.ones((2,200,200))
c2 = 4 * np.ones((2,200,200))
print(np.linalg.norm(np.array([X,Y]) - c1))
Z = (1 - 1 / (1 * np.linalg.norm(np.array([X,Y]) - c1) + 1)) + (1 - 1 / (2 * 
np.linalg.norm(np.array([X,Y]) - c2) + 1))
plt.pcolormesh(X, Y, Z,cmap='hsv') 
plt.show()

1 个答案:

答案 0 :(得分:1)

问题是您当前的ZXY的维度不同。可以通过打印X,Y和Z的形状来验证。原因是,在计算方程式中的axis时没有提供norm,因此得到了标量值。您可以参考Official docs了解有关axis参数如何工作的更多信息。在您的情况下,由于您没有为axis指定任何值,因此它返回的是矩阵规范而不是 vector规范

下面是提供axis=0的解决方案,可以为XY的列式条目组合正确计算范数

Z = (1 - 1 / (1 * np.linalg.norm(np.array([X,Y]) - c1, axis=0) + 1)) + (1 - 1 / (2 *np.linalg.norm(np.array([X,Y]) - c2,  axis=0) + 1))
plt.pcolormesh(X, Y, Z,cmap='hsv') 

enter image description here