Я медленно перехожу с C на Python. На этот раз мне нужно численно рассчитать частные производные по заданной сетке. Я знаю, как это сделать на C, поэтому на данный момент я просто использую встроенный адаптер, т.е.
def dz(x,X,Y,Z,dx):
y = numpy.zeros((X,Y,Z), dtype='double');
code = """
int i, j, k;
for (i=0; i<X-1; i++){
for(k=0; k<Y; k++){
for (j=0; j<Z; j++){
y[i,k,j] = (x[i+1, k, j] - x[i, k, j])/dx;
}
}
}
for (j=0; j<Z; j++){
for(k=0; k<Y; k++){
y[X-1,k,j] = - x[X-1, k, j]/dx;
}
}
"""
weave.inline(code, ['x', 'y', 'dx', 'X', 'Y', 'Z'], \
type_converters=converters.blitz, compiler = 'gcc');
return y;
где x
и y
— это трехмерные массивы numpy, как вы можете видеть, а второй цикл обозначает граничные условия. Конечно, я могу реализовать ту же логику и на чистом Python, но код будет неэффективным. Интересно, однако, можно ли вычислить частную производную, используя чистый numpy? Буду признателен за любую помощь, которую может предоставить любой.
X
,Y
,Z
в смысле? формаx
? - person emeth   schedule 22.07.2014numpy partial derivative
- person wwii   schedule 22.07.2014