У меня есть 1-D функция, которая занимает столько времени, чтобы вычислить большой массив с двумя значениями «x», поэтому очень легко создать интерполированную функцию с помощью SciPy а затем вычислить y, используя это, что будет намного быстрее. Однако я не могу использовать функцию интерполяции на массивах с более чем 1-D.Использование функции интерполяции над двумерным массивом
Пример:
# First, I create the interpolation function in the domain I want to work
x = np.arange(1, 100, 0.1)
f = exp(x) # a complicated function
f_int = sp.interpolate.InterpolatedUnivariateSpline(x, f, k=2)
# Now, in the code I do that
x = [[13, ..., 1], [99, ..., 45], [33, ..., 98] ..., [15, ..., 65]]
y = f_int(x)
# Which I want that it returns y = [[f_int(13), ..., f_int(1)], ..., [f_int(15), ..., f_int(65)]]
Но возвращается:
ValueError: object too deep for desired array
Я знаю, что я мог бы перебираем всех членов х, но я не знаю, если это лучший вариант ...
Спасибо!
EDIT:
функция так же будет делать работу:
def vector_op(function, values):
orig_shape = values.shape
values = np.reshape(values, values.size)
return np.reshape(function(values), orig_shape)
Я попытался np.vectorize, но это слишком медленно ...
что, вероятно, даст странность по краям – reptilicus
@reptilicus Почему? Я, кажется, не понимаю, что вы можете иметь в виду, извините ... – Jaime
Я думал, что интерполяция приведет к тому, что значения на краях исходного массива будут разными, как только массив будет сплющен, а затем интерполирован, а затем изменен. В основном левые края исходного массива будут интерполированы с правыми краями следующей строки, что может или не может вызвать проблемы. – reptilicus