如何在Python中插入未排序的2D numpy数组,并将插入值与原始值进行比较?

2024-09-29 03:38:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试插值奇异值分解的模态系数。我有一个二次方程ax^2 + bx,随机ab。然后我填充一个矩阵y二次型的值,然后使用svd。现在我需要插值第一个模式的结果系数,由代码中的c1给出,对于ab在0和1之间。在过去的几天里,我尝试了很多方法,但是没有一种是有效的,关于插值的其他问题也帮不了我。我的interplant在我指定的abc1处给出了精确的c1值,但是在其他已知的c1值处没有意义。你知道吗

另外,如何检查c1_interpolated数组中特定ab处的值?i、 每次都不调用函数?你知道吗

我非常感谢你的帮助,因为我已经在这个问题上纠缠了好几天了。你知道吗

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)


Tags: sampleimportasnprandomuniformscipy插值
1条回答
网友
1楼 · 发布于 2024-09-29 03:38:57

我只想在这里总结一下我所理解的,因为这听起来非常混乱。你知道吗

你有一个矩阵。您正在对它执行奇异值分解,它将返回三个数组。然后,您希望通过第三个数组进行插值,该数组对应于矩阵的右奇异向量,是矩阵的厄米数与自身乘积的一组正交特征向量。甚至不询问如何执行插值,它会给你什么?如果我们考虑矩阵的第一行,它的每一个元素都是第一个数组的第一行与第二个数组的第一个元素的乘积与第三个数组的每一列的乘积。如果通过第三个数组的列进行插值,将得到矩阵的第一行,其中包含更多元素。那你为什么不马上插值呢?我真的不明白你想在这里得到什么。。。你知道吗

相关问题 更多 >