python - 如何使用数组方法而不是“for循环”绘制正方形、矩形、十六进制二维曲面?
问题描述
我正在寻找使用初始 2x2 矩阵绘制正方形、矩形、六边形 2D 表面的通用代码。
以下是我想消除'for循环'的代码,而是使用numpy的更简单的数组方法。从更大的角度来看,我有 8 个“for 循环”,这将显着减慢我的程序。
import numpy as np
import math
import matplotlib.pyplot as plt
l= 10 #loop limits
lmit=5#plot limits
# 2x2 matrix
a = [-0.5, 1];
b = [1.00, 0.00];
# variable define
x = np.zeros((2*l, 2*l))
y = np.zeros((2*l, 2*l))
fig = plt.figure()
for i in range(-l, l):
for k in range(-l, l):
x[i + l, k + l] = (i * a[0] + k * b[0]);
y[i + l, k + l] = (i * a[1] + k * b[1]);
plt.scatter(x[i + l, k + l], y[i + l, k + l], s=6, color='Blue')
plt.ylim(-lmit, lmit)
plt.xlim(-lmit, lmit)
plt.show()
谢谢你的帮助。
解决方案
您可以创建一个meshgrid
并使用 numpy 的广播。(请注意,在 Python 中,行不应以分号结尾,有时 Jupyter 块中的最后一个命令除外。)
import numpy as np
import matplotlib.pyplot as plt
l = 10 # loop limits
# 2x2 matrix
a = [-0.5, 1]
b = [1.00, 0.00]
x0, y0 = np.meshgrid(np.arange(-l, l + 1), np.arange(-l, l + 1))
x1 = x0 * a[0] + y0 * b[0]
y1 = x0 * a[1] + y0 * b[1]
plt.scatter(x1, y1, s=6, color='navy')
plt.show()
推荐阅读
- python - dict 的类型提示给出 TypeError: 'type' object is not subscriptable
- react-native - createBottomTabNavigator 如何修改标题?
- angular - Angular Material Select Dropdown,发出整个对象项,而不仅仅是一个值
- talend - tExtractJSON 表为空 Talend
- ansible - 在变量等号中使用时出现 Ansible 错误
- c++ - 有没有办法在程序结束之前获取退出代码?
- javascript - 修复 bootstrap daterangepicker 在 bootstrap 3.3.7 上无法正确显示
- matlab - 在 Matlab 中求解微分方程 - 体外溶出度
- javascript - 有没有一种方法/API 可以保存网页资产,它适用于 HTTP,而不仅仅是 HTTPS?
- flutter - 带有模板的 Flutter 包提供程序