Использование массива numpy в случае возникновения проблем, как это исправить? - PullRequest
0 голосов
/ 20 марта 2020

Я хотел бы проверить каждый элемент "z" с условием "если еще" и вернуть требуемое уравнение. Моя реализация приводит к ошибке. Я пробовал функции "z.all" и "z.any", но эти два преобразовывают "z" в логический массив. Я не хочу z в качестве логического массива. Как я могу это сделать, пока z остается как массив numpy?

z - это numpy массив и его форма (10610,))

    def function(z):
        alpha = 1
        if (z < 0):
            return -alpha * z
        elif (0 <= z <= 1):
            return (3 * z ** 3) - (4 * z ** 2) + (2 * z)
        else:
            return z

Ответы [ 3 ]

0 голосов
/ 20 марта 2020

Если я правильно понимаю, вы хотите применить свою функцию ко всем элементам в массиве z, верно? Если это так, вы можете посмотреть на функцию numpys векторизация .

Для вашего кода:

vfunc = np.vectorize(function)
z = vfunc(z)

Если важны скорость и эффективность, вы можете обратиться к это другой ответ, где сравниваются разные методы.

0 голосов
/ 20 марта 2020

Использование логического индексирования :

def function(z):
    alpha = 1

    m = (z < 0)
    z[m] = -alpha * z[m]

    m = ((z >= 0) & (z <= 1))
    z[m] = (3 * z[m] ** 3) - (4 * z[m] ** 2) + (2 * z[m])

    return z
0 голосов
/ 20 марта 2020

Вы можете использовать numpy.where для двух условий:

np.where(
    z < 0,
    -alpha * z,
    np.where(
        z <= 1,
        (3 * z ** 3) - (4 * z ** 2) + (2 * z),
        z))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...