gpt4 book ai didi

python - 在二维数组上使用插值函数

转载 作者:行者123 更新时间:2023-11-30 23:37:48 24 4
gpt4 key购买 nike

我有一个一维函数,需要花费很多时间来计算一个大的二维“x”值数组,因此使用 SciPy 工具创建插值函数然后使用它计算 y 非常容易,这会快得多。但是,我无法对超过一维的数组使用插值函数。

示例:

# 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

我知道我可以循环所有 x 成员,但我不知道这是否是更好的选择...

谢谢!

编辑:

类似的函数也可以完成这项工作:

def vector_op(function, values):

orig_shape = values.shape
values = np.reshape(values, values.size)

return np.reshape(function(values), orig_shape)

我尝试过 np.vectorize 但它太慢了......

最佳答案

如果f_int想要单维数据,您应该展平您的输入,将其输入插值器,然后重建您的原始形状:

>>> x = np.arange(1, 100, 0.1)
>>> f = 2 * x # a simple function to see the results are good
>>> f_int = scipy.interpolate.InterpolatedUnivariateSpline(x, f, k=2)

>>> x = np.arange(25).reshape(5, 5) + 1
>>> x
array([[ 1, 2, 3, 4, 5],
[ 6, 7, 8, 9, 10],
[11, 12, 13, 14, 15],
[16, 17, 18, 19, 20],
[21, 22, 23, 24, 25]])
>>> x_int = f_int(x.reshape(-1)).reshape(x.shape)
>>> x_int
array([[ 2., 4., 6., 8., 10.],
[ 12., 14., 16., 18., 20.],
[ 22., 24., 26., 28., 30.],
[ 32., 34., 36., 38., 40.],
[ 42., 44., 46., 48., 50.]])

x.reshape(-1) 进行扁平化,.reshape(x.shape) 将其返回到原始形式。

关于python - 在二维数组上使用插值函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15162925/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com