python - 如何在 Python 中插入未排序的 2D numpy 数组并将插入的值与原始值进行比较?
问题描述
我正在尝试插入 SVD 分解的模式系数。我有一个二次方程ax^2 + bx
,随机a
和b
。然后我用二次的值填充一个矩阵y
,然后使用svd
. c1
现在我需要对代码中给出的第一种模式的结果系数进行插值,a
介于b
0 和 1 之间。在过去的几天里,我尝试了很多东西,但没有一个有效,关于插值的其他问题是不帮助我。我的插值给出了我指定的and和我指定的精确c1
值,但在其他已知值上却是胡说八道。a
b
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)
解决方案
我只想在这里总结一下我的理解,因为这听起来非常令人困惑。
你有一个矩阵。您正在对其执行奇异值分解,这会返回三个数组。然后,您希望通过第三个数组进行插值,该数组对应于矩阵的右奇异向量,并且是矩阵的 Hermitian 与其自身的乘积的一组正交特征向量。甚至不问如何执行这种插值,它会给你什么?如果我们考虑矩阵的第一行,它的每个元素都是由第一个数组的第一行乘以第二个数组的第一个元素乘以第三个数组的每一列的乘积给出。如果您通过第三个数组的列进行插值,这将为您提供矩阵的第一行,其中包含更多元素。那么,为什么不立即对矩阵进行插值呢?我真的不明白你想在这里实现什么......
推荐阅读
- wpf - WPF datagrid 一列作为组合框添加每一行不同的列表
- ios - Objective-C 中的作用域 NSArray
- swift - 半纬度/长三角洲,无需扩展
- arrays - 如何在 bash 中使用 echo 输出准备变量然后打印它
- javascript - 为什么 JavaScript 不执行?
- c++ - 未从实时 ETW 消费者接收 Microsoft-Windows-Kernel-Process 事件
- scala - sbt 未显示“runMain”的完整输出
- node.js - 反应
ProtectedRoute 问题/无法按预期工作 - java - 正则表达式只允许给定字符类中的一个(可能是重复的)字符
- html - 来自 HTML 文档中嵌入的 typeform 的“unsafe-eval”错误 Google App Engine 托管