Я относительно новичок в программировании на Python и NumPy, но у меня есть инженерный опыт и я широко использую VBA. В настоящее время я использую Python для анализа задач газодинамики, которые включают в себя математически сложные и иногда разрывные функции (ударные волны и переходные потоки). Мне нужна помощь с программированием кусочно-непрерывных функций.
Это упрощенная версия одного аспекта того, что я делаю. У меня есть кусочно-непрерывная функция от двух переменных:
f(Re, r) = fL(Re, r), Re= 2000 для всех r
Я протестировал различные варианты вычисления f, включая циклы, векторизованный скаляр function, numpy.where(), numpy.select(), numpy.piecewise() и различные формы логического индексирования. Кажется, numpy.piecewise() предлагает наиболее элегантное решение, но я не понимаю, как работать с двумя аргументами. Надеюсь, приведенный ниже код прояснит это; любая помощь или комментарии очень приветствуются.
Есть ли способ реализовать функцию numpy.piecewise() с двумя аргументами поэлементно?
Разумно ли мое решение с логической индексацией ниже, учитывая, что массивы могут стать довольно большими?
import numpy as np
def fL(Re, r):
return 16.0/Re
def fT(Re,r):
return ((-1.8*np.log10((r/3.7)**1.11 + 6.9/Re))**-2.0)/4.0
Re = np.logspace(3., 7., 5)
# This works fine for a scalar value of r:
r = 0.0001
def f0(Re, r):
return np.piecewise(Re, [Re=2000.0], [fL, fT], r)
print('\n Re: ', Re)
print(' r: ', r)
print('f0(Re, r): ', f0(Re, r))
# This works element-wise for arrays of Re and r (which is what I want):
r = np.full_like(Re, 0.0001)
def f1(Re, r):
fct = np.zeros(len(Re))
fct[Re < 2000.0] = fL(Re[Re < 2000.0], r[Re < 2000.0])
fct[Re >= 2000.0] = f0(Re[Re >= 2000.0], r[Re >= 2000.0])
return fct
print('\n Re: ', Re)
print(' r: ', r)
print('f1(Re, r): ', f1(Re, r))
# but this does not work element-wise:
print('\n Re: ', Re)
print(' r: ', r)
print('f(Re, r): ', f0(Re, r))
Подробнее здесь: https://stackoverflow.com/questions/791 ... unction-co
Как оптимизировать кусочно-непрерывную функцию Python с несколькими аргументами, содержащую условные операторы, для рабо ⇐ Python
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение