Numpy: Значение истинности массива с более чем одним элементом неоднозначно.Используйте a.any () или a.all () - PullRequest
0 голосов
/ 27 января 2019

Я знаю, что эта ошибка была опубликована ранее, но я не уверен, что делать дальше.Я хочу написать функцию для возврата прямоугольной волны, а затем.

Вот мой код:

def V_in(t):

    v  = np.floor(2*t)      

    if v % 2 == 0   
        V_in = 1
    else: 
        V_in = -1

    return V_in


t = np.arange(0,10,1000)

square_wave = V_in(tpoints)

plt.plot(tpoints, square_wave);

При запуске я получаю это сообщение об ошибке:

ValueError: Значение истинности массива с более чем одним элементом неоднозначно.Используйте a.any () или a.all ()

Я обнаружил, что смогу заставить его работать, если создам цикл для всех значений t и сохраню их в массиве, но этоне работает, когда я пытаюсь использовать его во второй функции.

def f(V,t):
    return (V_in(t) - V)

Где V - начальное значение.Эта вторая функция затем используется в алгоритме RK4 для определения напряжения.

1 Ответ

0 голосов
/ 27 января 2019

Либо вы можете использовать цикл for для изменения значений массива, либо вы можете использовать векторизованную операцию, используя np.where, чтобы внести изменения сразу, как показано ниже.np.where(V%2==0, 1, -1) присвоит 1 значениям массива, которые делятся на 2, а -1 - значениям, которые не являются.

def V_in(t):
    V  = np.floor(2*t)  
    V = np.where(V%2==0, 1, -1)
    return V


t = np.linspace(0,10,100)

square_wave = V_in(t)

plt.plot(t, square_wave);

enter image description here

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