我正在尝试绘制这样的函数。但是,以下代码将导致错误。我认为原因是norm ()
中返回了标量值,但是如何解决呢?
图像的标签代表定义公式,搜索空间,从左开始的最佳解决方案
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()
答案 0 :(得分:1)
问题是您当前的Z
与X
和Y
的维度不同。可以通过打印X,Y和Z的形状来验证。原因是,在计算方程式中的axis
时没有提供norm
,因此得到了标量值。您可以参考Official docs了解有关axis
参数如何工作的更多信息。在您的情况下,由于您没有为axis
指定任何值,因此它返回的是矩阵规范而不是 vector规范
下面是提供axis=0
的解决方案,可以为X
和Y
的列式条目组合正确计算范数
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')