首页 > 解决方案 > 使用 matplotlib 绘制轮廓时出错

问题描述

我正在尝试绘制这样的函数。但是,下面的代码会导致错误。我认为原因是在 中返回了一个标量值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()

标签: pythonnumpymatplotlib

解决方案


问题是您的 currentZ与您的XY. 这可以通过打印 X、Y 和 Z 的形状来验证。原因是您没有在等式中提供axis计算norm时间,因此您得到了一个标量值。您可以参考官方文档以获取有关参数如何工作的更多信息axis。在您的情况下,由于您没有为 指定任何值axis,因此它返回的是矩阵范数而不是向量范数

下面是您提供的解决方案,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') 

在此处输入图像描述


推荐阅读