#python #python-3.x #matplotlib
#python #python-3.x #matplotlib
Вопрос:
Недавно я начал изучать Python.
Я узнал, что для определения независимой переменной (z в примере ниже) вы можете написать с помощью numpy.linspace():
from matplotlib import pyplot as pp
import numpy as np
from math import pi
#z=np.linspace(1,-1) z definition works
z=np.arange(1,-1) #z definition does not work
w=z
pp.plot(z,w)
pp.xlabel("Input")
pp.ylabel("Output")
pp.title("Function")
pp.show()
print(z,w)
Однако, если мы определяем z с помощью np.arange (см. Строку с комментариями), кажется невозможным отобразить график (график не отображается).
Если я хочу использовать последнее определение для независимой переменной, могу ли я по-прежнему отображать другую переменную или я вынужден использовать определение linspace?
Спасибо
Комментарии:
1. Это потому
np.arange(1, -1)
, что пытается перейти от 1 к -1 с шагом (по умолчанию) 1. Если вы проверяете значениеz
made из этого оператора, оно должно быть пустым массивом.
Ответ №1:
np.linspace(1, -1)
создает массив чисел, который начинается 1
и заканчивается -1
. По умолчанию выполняется 50 шагов, поэтому каждый шаг имеет длину -2/49
. Обычно количество шагов задается явно, например np.linspace(1, -1, 200)
. Стандартно начальное значение выбирается меньшим, чем значение остановки, но работают оба способа.
np.arange(1, -1)
создает массив, начинающийся с 1, добавляя шаг (по умолчанию 1), и заканчивается, когда значение больше или равно значению остановки. Итак, в этом случае он просто немедленно останавливается, создавая пустой массив. np.arange(1, -1, -1)
будет выполнять шаги -1 и создавать массив [1, 0]
, останавливаясь непосредственно перед -1
этим.
Магия Numpy начинается, когда эти массивы используются в выражениях, как если бы они были отдельными переменными. Это называется широковещательной передачей.
Вот пример графика, который показывает работу np.linspace
. w
вычисляется только для 50 заданных значений z
. Обратите внимание, что, хотя z
создается от 1
до -1
, график по умолчанию показывает положительную сторону справа. Также обратите внимание, что стандартным способом импорта matplotlib является as plt
, что упрощает для других людей следование коду.
from matplotlib import pyplot as plt
import numpy as np
z = np.linspace(1, -1)
w = np.sin(z * np.pi)
plt.plot(z, w, '-bo')
plt.xlabel('$z$')
plt.ylabel(r'$w = sin(z * pi)$')
plt.show()