Проверка условий при использовании numpy.piecewise для создания кусочно-периодического графика - PullRequest
0 голосов
/ 22 марта 2011

Я пытаюсь сгенерировать кусочно-периодический график, используя Numpy и matplotlib, например:

import numpy as np
import matplotlib.pyplot as plt

Q1 = lambda t, f, Q_max: Q_max * np.sin(2 * np.pi *f * t)
Q2 = lambda t, f, Q_max: 0

def Q_true(t, f, stat):
    while(t >= 1/f):
        t -= 1/f 
    while(t < 0): 
        t += 1/f 
    return ((t <= 1/(2*f)) == stat)

Q = lambda t, f, Q_max: np.piecewise(t, [Q_true(t, f, True) , Q_true(t,f, False)], [Q1, Q2], f, Q_max)

Q_max = 225 # mL/sec
f = 1.25 # Hz
t = np.linspace(0,4,101) # secs
plt.plot(t, Q(t, f, Q_max))

Проблема в том, что Q_true получает весь массив t вместо отдельных точек.Это не проблема, если я просто использую операторы меньше / больше чем в кондлисте numpy.piecewise, но гораздо проще определить, является ли это истиной или ложью, используя Q_true.

График должен выглядеть примерно таквот так:

Example Plot

Есть идеи?

Спасибо!

1 Ответ

2 голосов
/ 22 марта 2011

Работает следующая версия Q_true:

def Q_true(t, f, stat):
    period = 1/f
    return (t % period < period/2) == stat

Обратите внимание, что вы называете свои анонимные функции (Q1 = lambda ...). В этом случае вы должны просто определить функцию, используя def.

...