У меня есть экспериментальные наблюдения в объеме:Функции для вычисления 3D градиента с неравноотстоящими местами образца
import numpy as np
# observations are not uniformly spaced
x = np.random.normal(0, 1, 10)
y = np.random.normal(5, 2, 10)
z = np.random.normal(10, 3, 10)
xx, yy, zz = np.meshgrid(x, y, z, indexing='ij')
# fake temperatures at those coords
tt = xx*2 + yy*2 + zz*2
# sample distances
dx = np.diff(x)
dy = np.diff(y)
dz = np.diff(z)
grad = np.gradient(tt, [dx, dy, dz]) # returns error
Это дает мне ошибку:
ValueError: operands could not be broadcast together with shapes (10,10,10) (3,9) (10,10,10)
.
EDIT: В соответствии с @ сойкой-kominek в комментарии:
np.gradient won't work for you, it simply doesn't handle unevenly sampled data.
Я обновил вопрос. Есть ли какая-либо функция, которая может выполнять мои вычисления?
Просто увидел, что ось у не линейно разнесены. Возможно, вам придется интерполировать это на линейной сетке. – roadrunner66
Обратите внимание, что 'linspace' страдает ошибкой fencepost относительно' np.arange', поэтому для получения 0,1 разницы вам нужны 11, 9, 5 'posts'. – roadrunner66
Я обновил вопрос и заголовок, чтобы было ясно, что интервалы неравномерны. – crypdick