gpt4 book ai didi

python - 内插 2 个 numpy 数组

转载 作者:太空宇宙 更新时间:2023-11-03 10:56:42 25 4
gpt4 key购买 nike

是否有任何 numpy 或 scipy 或 python 函数可以在两个 2D numpy 数组之间进行插值?我有两个 2D numpy 数组,我想对第一个 numpy 数组应用更改,使其类似于第二个 2D 数组。约束是我希望更改顺利进行。例如,让数组为:

A
[[1 1 1
1 1 1
1 1 1]]

B
[[34 100 15
62 17 87
17 34 60]]

要使 A 与 B 相似,我可以将 33 添加到 A 的第一个网格单元,依此类推。但是,为了使更改更平滑,我计划使用 2x2 计算平均值数组 B 上的窗口,然后将结果更改应用于数组 A。是否有内置的 numpy 或 scipy 方法来执行此操作或遵循此方法而不使用 for 循环。

最佳答案

您刚刚描述了卡尔曼滤波/数据融合问题。您有一个初始状态 A,它有一些错误,您有一些观察值 B,也有一些噪音。您希望通过从 B 中注入(inject)一些信息来改进对状态 A 的估计,同时考虑两个数据集中的空间相关误差。我们没有关于AB中的错误的任何先验信息,所以我们只能弥补。这是一个实现:

import numpy as np

# Make a matrix of the distances between points in an array
def dist(M):
nx = M.shape[0]
ny = M.shape[1]
x = np.ravel(np.tile(np.arange(nx),(ny,1))).reshape((nx*ny,1))
y = np.ravel(np.tile(np.arange(ny),(nx,1))).reshape((nx*ny,1))
n,m = np.meshgrid(x,y)
d = np.sqrt((n-n.T)**2+(m-m.T)**2)
return d

# Turn a distance matrix into a covariance matrix. Here is a linear covariance matrix.
def covariance(d,scaling_factor):
c = (-d/np.amax(d) + 1)*scaling_factor
return c

A = np.array([[1,1,1],[1,1,1],[1,1,1]]) # background state
B = np.array([[34,100,15],[62,17,87],[17,34,60]]) # observations

x = np.ravel(A).reshape((9,1)) # vector representation
y = np.ravel(B).reshape((9,1)) # vector representation

P_a = np.eye(9)*50 # background error covariance matrix (set to diagonal here)
P_b = covariance(dist(B),2) # observation error covariance matrix (set to a function of distance here)

# Compute the Kalman gain matrix
K = P_a.dot(np.linalg.inv(P_a+P_b))

x_new = x + K.dot(y-x)
A_new = x_new.reshape(A.shape)

print(A)
print(B)
print(A_new)

现在,此方法仅在您的数据没有偏见时才有效。所以 mean(A) 必须等于 mean(B)。但无论如何你仍然会得到好的结果。此外,您可以随心所欲地使用协方差矩阵。我建议阅读卡尔曼滤波器维基百科页面以获取更多详细信息。

顺便说一句,上面的例子产生:

[[ 27.92920141  90.65490699   7.17920141]
[ 55.92920141 7.65490699 79.17920141]
[ 10.92920141 24.65490699 52.17920141]]

关于python - 内插 2 个 numpy 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39885723/

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