Как я могу построить свою собственную функцию в python? - PullRequest
0 голосов
/ 17 апреля 2020

Я создаю функцию в python и мне нравится наносить ее на множество (0: 100). Итак, я определил вектор x, но когда я хочу вычислить y для каждого x, python возвращает мне эту ошибку:

ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()

Кто-нибудь может мне помочь?

g = 9.81
Qave = 0.05
def efficiency(h):
    Qn = 3e-5 *np.sqrt(2*g*h)
    NN = np.ceil(Qave/Qn)
    teta = 0.9 * np.sqrt(2*g*h)
    if (teta>=3.025):
        Kl = 2e-5
    else:
        Kl = 2*np.sqrt(1e-9/np.pi*teta)
    inverse_efficiency = np.exp(-Kl*1.2e4*teta)
    return(inverse_efficiency)
# plot data
x = np.arange(0.01, 100, 0.01)
y=efficiency(x)
plot.plot(time, amplitude)

Ответы [ 2 ]

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

Вы можете векторизовать свою функцию. На данный момент функция работает только для скалярных входов. Вот почему ваша функция завершается ошибкой для массива numpy, потому что if (teta >= 3.025): для массивов.

Вы можете исправить свой код, используя векторизацию numpys.

import numpy as np
import matplotlib.pyplot as plt

g = 9.81
Qave = 0.05


def efficiency(h):
    Qn = 3e-5 * np.sqrt(2 * g * h)
    NN = np.ceil(Qave / Qn)
    teta = 0.9 * np.sqrt(2 * g * h)

    if teta >= 3.025:
        Kl = 2e-5
    else:
        Kl = 2 * np.sqrt(1e-9 / np.pi * teta)
    inverse_efficiency = np.exp(-Kl * 1.2e4 * teta)
    return (inverse_efficiency)

efficiency_vector = np.vectorize(efficiency)

# plot data
h = np.arange(0.01, 100, 0.01)
efficiency = efficiency_vector(h)
plt.plot(h, efficiency)
0 голосов
/ 17 апреля 2020

Поскольку ваша функция efficieny может применяться только к одному значению, а не к массиву x.

Попробуйте установить y как:

y=[efficiency (i) for i in x]
#print (y)
plot.plot(x, y)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...