[英]How can I interpolate unsorted 2D numpy arrays in Python and compare the interpolated values to the original one?
我正在嘗試插入 SVD 分解的模式系數。 我有一個二次方程ax^2 + bx
,隨機a
和b
。 然后我用二次方的值填充矩陣y
,然后使用svd
。 現在我需要對代碼中的c1
給出的第一種模式的結果系數進行插值,用於 0 和 1 之間的a
和b
。在過去的幾天里我嘗試了很多東西,但都沒有奏效,還有其他問題插值對我沒有幫助。 我的插值器在我指定的a
和b
以及c1
處給出了准確的c1
值,但在其他已知的c1
值上則是胡說八道。
另外,我如何能夠檢查c1_interpolated
數組中特定a
和b
? 即c1(a = 0.05, b = 0.08)
沒有每次都調用函數?
我將非常感謝您的幫助,因為我已經被這個問題困了好幾天了。
import numpy as np
import matplotlib.pyplot as plt
from scipy.interpolate import griddata
def f(x, a, b):
return a*x*x + b*x + 1
end = 1.01
begin = 0
x = np.arange(begin,end,0.1)
npoints = int(1/0.1+1)
a = (np.random.uniform(0,1,npoints))
b = (np.random.uniform(0,1,npoints))
#c = np.random.uniform(0,1,npoints)
cols = 5
y = np.zeros((cols,a.size))
for i in range(cols):
y[i] = f(x, a[i], b[i])
u, s, vh = np.linalg.svd(y, full_matrices=True)
c1 = (vh[0])
c2 = vh[1]
c3 = vh[2]
sample = 8
input_arr = list(zip(a[:sample], b[:sample]))
A= np.linspace(min(a[:sample]), max(a[:sample]))
B = np.linspace(min(b[:sample]), max(b[:sample]))
A, B = np.meshgrid(A, B)
interp = scipy.interpolate.LinearNDInterpolator(input_arr, c1[:sample], fill_value=0)
c1_interpolated = interp(A, B)
我將嘗試在這里總結我所理解的內容,因為這聽起來非常令人困惑。
你有一個矩陣。 您正在對其執行奇異值分解,這會返回三個數組。 然后,您希望通過第三個數組進行插值,該數組對應於矩陣的右奇異向量,並且是矩陣厄密量與其自身的乘積的一組正交特征向量。 甚至不問如何執行這種插值,它會給你什么? 如果我們考慮矩陣的第一行,它的每個元素都由第一個數組的第一行與第二個數組的第一個元素和第三個數組的每一列的乘積給出。 如果您通過第三個數組的列進行插值,這將為您提供具有更多元素的矩陣的第一行。 那么為什么不立即對矩陣進行插值呢? 我真的不明白你想在這里實現什么......
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.