Сетка и путаница относительно координат X и Y - PullRequest
0 голосов
/ 25 февраля 2011
import numpy as np
def L2Norm(f, x, y, d=0.00001):
    dudx = (f(x+d,y) - f(x-d,y)) / (2*d) 
    dudy = (f(x,y+d) - f(x,y-d)) / (2*d)
    L2Norm = np.float128(np.sqrt(dudx**2 + dudy**2))
return L2Norm

def f(x,y):
    return np.float128((1.0 + np.sin(np.pi*x))*((3.0 + np.cos(2.011*y))**2)*np.e**((-x**2)-((y**2)/4)))

# 20 points in X direction
x = np.linspace(-1.0,1.0,20)
# 40 points in Y direction
y = np.linspace(-2.0,2.0,40)
[X,Y] = np.meshgrid(x,y)
L2_Norm = L2Norm(f, X, Y)
print L2_Norm[37,13]

Моя функция выше.По сути, я ожидал бы вызвать функцию L2Norm и получить массив, идущий от 0 до 19 в направлении X, или первый индекс и от 0 до 39 во второй.соответствует тому, где я ожидал бы y.

Я могу вызвать L2_Norm [39,19], но не L2_Norm [19,39] Почему это?

1 Ответ

2 голосов
/ 25 февраля 2011

Если вы позвоните L2_Norm.shape, вы увидите, что размеры массива равны (40,20), так что, согласно состоянию ошибки, L2_Norm[19,39] выходит за пределы диапазона, потому что 39> максимальный индекс в этом измерении 19Взгляните также на форму X и Y, чтобы понять, почему L2_Norm имеет такую ​​же форму, как и он, - причина ясна, если вы посмотрите в документацию meshgrid:

Для векторов x, y с длинами Nx = len (x) и Ny = len (y), возвращает X, Y, где X и Y - это (Ny, Nx) -образные массивы с элементами xи y повторяется, чтобы заполнить матрицу вдоль первого измерения для x, второе для y.

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