Построение пошаговой функции с использованием matplotlib приводит к ValueError: Истинное значение массива с более чем одним элементом неоднозначно - PullRequest
1 голос
/ 10 января 2020

Я хочу построить пошаговую функцию, используя matplotlib:

import numpy as np
import matplotlib.pyplot as plt

def pwf(x):
    return 0 if x < 0 else 1
x = np.linspace(-1, 1, 100)
plt.plot(x, pwf(x))

и получаю следующую ошибку:

ValueError: Значение истинности массива с более одного элемента неоднозначно. Используйте a.any () или a.all ()

Однако при использовании (x < 0).any() я просто получаю True, а при (x < 0).all() я получаю False, ни один из которых не подходит для моего случая.

Я нашел ответ здесь: Python Ошибка: Использование matplotlib: Значение истины массива с более чем одним элементом неоднозначно. Используйте a.any () или a.all () , но вопрос и ответ настолько раздуты ненужным кодом, что я решил выложить из него краткое решение.

Ответы [ 2 ]

1 голос
/ 10 января 2020

Вы можете использовать

def pwf(x):
    return (x < 0).astype(float)

или, для решения, которое будет работать с числами, отличными от 0 и 1,

def pwf(x):
    return np.array([1,0])[(x < 0).astype(int)]

Общее решение для такого рода проблем будет для векторизации функции:

import matplotlib.pyplot as plt
import numpy as np

def pwf(x):
    return 0 if x < 0 else 1

x = np.linspace(-1, 1, 100)

plt.plot(x, np.vectorize(pwf)(x))
plt.show()
0 голосов
/ 10 января 2020

Простым решением является использование списка Python:

x = np.linspace(-1, 1, 100)
y = [pwf(x) for x in x]
plt.plot(x, y)

Кредит идет к @ Mike Müller за ответ { ссылка } .

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