Моя функция np.vectorize'd не дает ожидаемого ответа - PullRequest
0 голосов
/ 27 февраля 2020

Я хочу интегрировать некоторую функцию в устройство dis c. Чтобы сделать это, я вместо этого хочу выполнить интегрирование по большему квадрату и определить подынтегральное выражение, возвращающее ноль, когда точка находится за пределами единицы dis c.

В любом случае, поэтому я хочу определить такого рода функции:

import numpy as np

# f(x, y) = x**2 + y**2  inside the disc
def f(x, y):
    r2 = x**2 + y**2
    if r2 > 1:
        return 0
    else:
        return r2

fv = np.vectorize(f)

Теперь давайте немного интегрируем меня sh:

xv, yv = np.meshgrid(np.linspace(-1,1,1001), np.linspace(-1,1,1001))

Возьмем некоторую произвольную точку внутри устройства dis c. Прежде чем получить vectorize 'd, мой f(x,y) работает как задумано:

f2(xv[330,577], yv[330,577])
> 0.13931599999999994

xv[330,577]**2 + yv[330,577]**2 == f2(xv[330,577], yv[330,577])
> True

Но векторизованная версия fv не дает того же значения.

fv(xv,yv)[330,577]
> 0

Фактически , если вы посмотрите на массив, который он возвращает, все полностью запутано. Все записи, кроме 14, равны нулю, внутри или снаружи устройства dis c. Эти 14 ненулевых записей равны единице.

Небольшая помощь, пожалуйста?

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