Numpy логическое выражение - справка по использованию a.any () и a.all () в выражении - PullRequest
0 голосов
/ 19 июня 2019

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

Я попытался сделать это с помощью логического выражения if, но вернул следующую ошибку:

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

Я знаю из этого ответа, что мне нужно использовать numpy a.any () и a.all (), но мне неясно, как / где я буду использовать их в цикле. Ниже приведен очень простой пример:

import numpy as np

a = np.linspace(1, 10, num=9)

def sortfoo(a):
    if a < 5:
        b = a*3
    else:
        b = a/2
    return b

result = sortfoo(a)
print(result)

Так что, я полагаю, я прошу привести пример того, где и как мне нужно использовать any () и all () для вышеуказанного.

Действительно простой вопрос, но по какой-то причине мой мозг не работает четко. Любая помощь высоко ценится.

Ответы [ 2 ]

4 голосов
/ 19 июня 2019

Учитывая описание, это выглядит как вариант использования для np.where()

a = np.linspace(1, 10, num=9)

b = np.where(a<5,a*3,a/2)

b
array([ 3.    ,  6.375 ,  9.75  , 13.125 ,  2.75  ,  3.3125,  3.875 ,
    4.4375,  5.    ])

Поскольку вы также упоминаете, что хотите применять разные функции, вы можете использовать один и тот же синтаксис

def f1(n):
    return n*3

def f2(n):
    return n/2

np.where(a<5,f1(a),f2(a))

array([ 3.    ,  6.375 ,  9.75  , 13.125 ,  2.75  ,  3.3125,  3.875 ,
        4.4375,  5.    ])
2 голосов
/ 19 июня 2019

Используя простое утверждение в numpy, вы можете сделать это:

import numpy as np
a = np.linspace(1, 10, num=9)
s = a < 5 # Test a < 5
a[s] = a[s] * 3
a[s == False] = a[s == False] / 2
...