#python #numpy #matplotlib
#python #numpy #matplotlib
Вопрос:
Я ищу общий код, который отображает квадратную, прямоугольную, шестиугольную 2D-поверхность, используя исходную матрицу 2×2.
Ниже приведен код, который я хотел исключить из «for loop» и вместо этого использовать более простой метод массива с использованием numpy. На более широкой картинке у меня есть 8 «for loop», что значительно замедлит работу моей программы.
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()
Спасибо за любую помощь.
Комментарии:
1. Для начала работает ли одна команда построения вне цикла?
plt.scatter(x, y, s=6, color='Blue')
. То есть построить целые массивы с помощью одного вызова, а не по одной точке за раз.
Ответ №1:
Вы могли бы создать 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()