Треугольный волновой массив в Python

Каков наиболее эффективный способ создания массива из 100 чисел, которые формируют форму треугольной волны ниже, с макс / мин амплитудой 0,5?

Треугольный сигнал:

введите описание изображения здесь

5 Solutions collect form web for “Треугольный волновой массив в Python”

Используйте генератор:

 def triangle(length, amplitude): section = length // 4 for direction in (1, -1): for i in range(section): yield i * (amplitude / section) * direction for i in range(section): yield (amplitude - (i * (amplitude / section))) * direction 

Это будет отлично работать для длины, делящейся на 4, вы можете пропустить до 3 значений для других длин.

 >>> list(triangle(100, 0.5)) [0.0, 0.02, 0.04, 0.06, 0.08, 0.1, 0.12, 0.14, 0.16, 0.18, 0.2, 0.22, 0.24, 0.26, 0.28, 0.3, 0.32, 0.34, 0.36, 0.38, 0.4, 0.42, 0.44, 0.46, 0.48, 0.5, 0.48, 0.46, 0.44, 0.42, 0.4, 0.38, 0.36, 0.33999999999999997, 0.32, 0.3, 0.28, 0.26, 0.24, 0.21999999999999997, 0.2, 0.18, 0.15999999999999998, 0.14, 0.12, 0.09999999999999998, 0.08000000000000002, 0.06, 0.03999999999999998, 0.020000000000000018, -0.0, -0.02, -0.04, -0.06, -0.08, -0.1, -0.12, -0.14, -0.16, -0.18, -0.2, -0.22, -0.24, -0.26, -0.28, -0.3, -0.32, -0.34, -0.36, -0.38, -0.4, -0.42, -0.44, -0.46, -0.48, -0.5, -0.48, -0.46, -0.44, -0.42, -0.4, -0.38, -0.36, -0.33999999999999997, -0.32, -0.3, -0.28, -0.26, -0.24, -0.21999999999999997, -0.2, -0.18, -0.15999999999999998, -0.14, -0.12, -0.09999999999999998, -0.08000000000000002, -0.06, -0.03999999999999998, -0.020000000000000018] 

Чтобы использовать numpy:

 def triangle2(length, amplitude): section = length // 4 x = np.linspace(0, amplitude, section+1) mx = -x return np.r_[x, x[-2::-1], mx[1:], mx[-2:0:-1]] 

Самый простой способ генерировать треугольную волну – использовать сигнал. Обратите внимание, что signal.sawtooth (phi, width) принимает два аргумента. Первый аргумент – это фаза, следующий аргумент указывает на симметрию. width = 1 дает правостороннюю пилочку, ширина = 0 дает левостороннюю пилочку, а ширина = 0,5 дает симметричный треугольник. Наслаждайтесь!

 from scipy import signal import numpy as np import matplotlib.pyplot as plt t = np.linspace(0, 1, 500) triangle = signal.sawtooth(2 * np.pi * 5 * t, 0.5) plt.plot(t, triangle) 

Вы можете использовать генератор итератора вместе с методом numpy fromiter.

 import numpy def trigen(n, amp): y = 0 x = 0 s = amp / (n/4) while x < n: yield y y += s if abs(y) > amp: s *= -1 x += 1 a = numpy.fromiter(trigen(100, 0.5), "d") 

Теперь у вас есть массив с квадратной волной.

Треугольник является абсолютной величиной пилообразной формы.

 from scipy import signal time=np.arange(0,1,0.001) freq=3 tri=np.abs(signal.sawtooth(2 * np.pi * freq * time)) 
  • Почему sys.getrefcount () возвращает 2?
  • Pb конвертирует список pandas.Series в массив numpy pandas.Series
  • Python: преобразование продолжительности отключения h min sec и оставление только минуты
  • Вычисление биномиальной вероятности для огромных чисел
  • Загрузка файла UTF-8 в Python 3 с помощью numpy.genfromtxt
  • Как объединить массив numpy и текстовый столбец и экспортировать в csv
  • Панды: разница между наибольшим и наименьшим значением внутри группы
  • Есть ли многозначительный biginteger?
  • Python - лучший язык программирования в мире.