Простая Python Функция с оператором if не работает? - PullRequest
0 голосов
/ 15 апреля 2020

Почему функция, указанная ниже, не работает? Я получаю сообщение об ошибке ValueError: Значение истинности массива с более чем одним элементом неоднозначно. Используйте a.any () или a.all ()

Заранее спасибо.

import math
from math import sin, cos, exp, pi, sqrt
from matplotlib import pyplot as plt

def pulse(Amax,td,t):
    if t<=td:
        y = Amax*sin((pi/td)*t)
    else:
        y = 0
    return y

t = np.linspace(0,4*pi,100)
Amax=10
td=11/1000
plt.plot(t,pulse(Amax,td,t), 'r', label='pulse A=10,td=11')

Ответы [ 3 ]

2 голосов
/ 15 апреля 2020

В t <= td вы напрямую сравниваете скаляр с массивом. Этот тип операции неоднозначен, потому что он не может определить, каким должно быть значение истинности.

0 голосов
/ 16 апреля 2020

В plt.plot вы даете 2 массива. Лучше заранее создать массив y, используя итерации по массиву t с подходящими условиями, иначе ваш импульс функции должен вернуть массив. как

def pulse (Amax,td,t):
    y=[]
    for i in t:
        if i <= td:
            y.append(Amax*sin((pi/td)*i))
        else:
            y.append(0)
    return y

наконец просто используйте plt.plot(t,pulse(Amax,td,t), whatever you want here)

0 голосов
/ 16 апреля 2020

некрасиво, но работает

i=0
y=zeros(N0); ti=zeros(N0)

for t in np.arange(0,tend,dt):
    ti[i]=t
    if t <= td:
        y[i]=amax*np.sin(wf*t)
    else:
        y[i]=0
    i+=1

------------

Может быть, немного лучше код

trg = np.arange(0,tend,dt)   # start,stop,step
for i,t in enumerate(trg):
    if t <= td:
        y[i]=amax*np.sin(wf*t)
    else:
        y[i]=0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...