Выполнять условные операции с использованием сеток в numpy и объединять их? - PullRequest
0 голосов
/ 30 января 2020

У меня есть две переменные, х, у. Я хочу вычислить группу вторичных переменных на основе условий, применяемых ко всем возможным комбинациям пар (x, y). Моя конечная цель - создать графики поверхности с этими переменными по сетке x, y.

Например, учитывая следующие условия:

  • A, если $ (x> y * \ sqrt ((4 * y) + 1)) AND (y
  • B, если $ (x x * \ sqrt ((4 * x) +1) $
  • C, если $ (x
  • D, если $ x = y $

С (x, y) в [ 1,5], где набор результатов {A, B, C, D} будет представлять одну из моих предполагаемых вторичных переменных, которые я намереваюсь построить.

Мой подход состоял в том, чтобы создать сетку из x и у, а затем запустите отдельные условия. Я закончил с четырьмя отдельными сетками.

Specifi c вопрос: как бы я go объединил эти четыре сетки в одну, чтобы я мог сделать поверхностный график

Общий вопрос: имеет ли этот подход смысл? Существует ли более рациональный или эффективный подход, учитывая, что я буду иметь дело с x, y, исходя из [1 10000+), и где случаи {A, B, C, D} будут включать в себя больше алгебры?

Моя попытка до сих пор:

x  = np.arange(1, 6, 1) 
y = np.arange(1, 6, 1) 


xx, yy  = np.meshgrid(x, y)

case_a = np.where(np.logical_and((xx > yy *( (4*yy)/1+1)**(1/2)), (yy < xx *((4*xx)/1+1)**(1/2))), "A", "")
case_b = np.where(np.logical_and((xx < yy *( (4*yy)/1+1)**(1/2)), (yy > xx *((4*xx)/1+1)**(1/2))), "B", "") 
case_c = np.where(np.logical_and((xx < yy *( (4*yy)/1+1)**(1/2)), (yy < xx *((4*xx)/1+1)**(1/2))), "C", "")
case_d = np.where(xx == yy, "D", "")

PS: я не уверен, как реализовать латекс код в этом SE. Заранее спасибо,

1 Ответ

0 голосов
/ 30 января 2020

Создайте условия, используя маски:

ma = np.logical_and((xx > yy *( (4*yy)/1+1)**(1/2)), (yy < xx *((4*xx)/1+1)**(1/2)))
mb = np.logical_and((xx < yy *( (4*yy)/1+1)**(1/2)), (yy > xx *((4*xx)/1+1)**(1/2)))
mc = np.logical_and((xx < yy *( (4*yy)/1+1)**(1/2)), (yy < xx *((4*xx)/1+1)**(1/2)))
md = xx == yy
# case_a = np.where(ma, "A", "")

Тогда вы можете использовать np.select:

case = np.select([ma, mb, mc, md], ['a', 'b', 'c', 'd'])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...