Если / Затем применить разные функции в зависимости от каждого значения в массиве - PullRequest
0 голосов
/ 30 декабря 2018

У меня есть вопрос, который якобы легко решить, но я до сих пор не могу его выяснить:

У меня есть массив с 1000 числами, который называется "mu", вот так:

array([2.25492522e-01, 2.21059993e-01, 2.16757006e-01,....)

Сейчасмне нужно вставить эти значения в две разные функции: для чисел в массиве, которые меньше 0,009, мне нужно использовать уравнение1:

nu = 1 - 5.5 * mu**(0.66) + 3.77 * mu

для всех других чисел в массиве мне нужно подключитьв уравнение 2:

nu = 0.819**(-11.5*mu)+0.0975**(-70.1*mu)

В конце мне нужен массив значений функции "nu".

Я попробовал этот код, но он не сработал

for item in mu:
    if item < 0.009:
       nu = 1 - 5.5 * mu**(0.66) + 3.77 * mu
    else:
       nu = 0.819**(-11.5*mu)+0.0975**(-70.1*mu)

print nu

Как я могу сказать Python ввести правильные числа?

1 Ответ

0 голосов
/ 30 декабря 2018

Одной из проблем является то, что вы не используете item в цикле for.Также вы не добавляете в список или не присваиваете новый массив для хранения своих результатов.В любом случае, NumPy имеет специальные функции, предназначенные для этой задачи.Например, используя numpy.where:

def func1(x):
    return 1 - 5.5 * x**(0.66) + 3.77 * x

def func2(x):
    return 0.819**(-11.5*x)+0.0975**(-70.1*x)

res = np.where(mu < 0.009, func1(mu), func2(mu))

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

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