python - 使用 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()
解决方案
问题是您的 currentZ
与您的X
和Y
. 这可以通过打印 X、Y 和 Z 的形状来验证。原因是您没有在等式中提供axis
计算norm
时间,因此您得到了一个标量值。您可以参考官方文档以获取有关参数如何工作的更多信息axis
。在您的情况下,由于您没有为 指定任何值axis
,因此它返回的是矩阵范数而不是向量范数
下面是您提供的解决方案,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')
推荐阅读
- reactjs - React,使用 react-hook-form 提交表单后显示消息
- debugging - 在 IntelliJ 中停止/终止调试线程
- angular - 如果我的内容溢出窗口高度,Angular 如何在底部自动滚动到新添加的元素?适用于整个页面,app
- c - 从单链表中删除元素的一个非常意外的问题
- php - Laravel SHOW WARNINGS 给出无缓冲查询活动错误
- javascript - 如何创建下拉文本的垂直列表?
- java - powerMockito 中的空指针异常
- php - 编码 PHP 时如何配置 VS 代码,以便大括号保持新行
- ios - 将内容缩放到设备
- makefile - HDF5 库中对 `compress2' 和其他函数的未定义引用