- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在研究一些图像分析算法,并尝试使用 numpy 进行最小二乘拟合。为了说明我正在尝试做什么,我生成了一个非常简单的测试用例:
A = np.zeros((2, 2))
A[0, 0] = 1
A[0, 1] = 3
A[1, 0] = 4
A[0, 1] = 5
所以这是我在 Ax = b 类型方程中的简单 A 矩阵。
现在,在这个测试用例中,我的图像基本上是一个简单的 2x2 图像,并且在每个点上我都有 2 个测量值。所以,在我的例子中,我模拟如下:
x = np.array([[13, 24], [13, 24], [13, 24], [13, 24]])
x = x.reshape((2,2,2))
现在,这表示我的 3 维图像,其中我有 2x2 网格和与每个像素关联的两个值。我可以逐个像素地解决这个问题;
np.linalg.lstsq(A, x[0, 0, :]) # fit at pixel (0, 0)
或
np.linalg.lstsq(A, x[0, 1, :]) # fit at pixel (0, 1)
但是,一旦我尝试类似的操作:
np.linalg.lstsq(A, x) # fit at all pixels together
它提示 x 是 3 维数组,我不确定如何告诉它它需要在前两个维度上广播。
最佳答案
reshape x
使其具有形状 (2, K),并在列中包含成对的像素值。调用lstsq
, 然后恢复结果的形状。
例如,这里有A
和x
:
In [86]: A
Out[86]:
array([[ 1., 5.],
[ 4., 0.]])
In [87]: x
Out[87]:
array([[[0, 1],
[2, 3]],
[[4, 5],
[6, 7]]])
将 x
reshape 为 y
,在列中使用像素值:
In [88]: y = x.reshape(-1,2).T
In [89]: y
Out[89]:
array([[0, 2, 4, 6],
[1, 3, 5, 7]])
y
是我们lstsq
需要的形状:
In [90]: result = np.linalg.lstsq(A, y)
In [91]: result[0]
Out[91]:
array([[ 0.25, 0.75, 1.25, 1.75],
[-0.05, 0.25, 0.55, 0.85]])
捕获解决方案,并恢复形状以匹配 x
:
In [92]: sol = result[0].T.reshape(x.shape)
In [93]: sol
Out[93]:
array([[[ 0.25, -0.05],
[ 0.75, 0.25]],
[[ 1.25, 0.55],
[ 1.75, 0.85]]])
通过单独解决几个像素来检查解决方案是否符合我们的预期:
In [94]: sol[0,0]
Out[94]: array([ 0.25, -0.05])
In [95]: np.linalg.lstsq(A, x[0,0])[0]
Out[95]: array([ 0.25, -0.05])
In [96]: sol[1,0]
Out[96]: array([ 1.25, 0.55])
In [97]: np.linalg.lstsq(A, x[1,0])[0]
Out[97]: array([ 1.25, 0.55])
关于python - numpy.linalg.lstsq 的广播问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27825935/
Pytorch 提供了一个 lstsq函数,但它返回的结果与 numpy 的版本截然不同。这是一个示例输入及其两个结果: import numpy as np import torch a = tor
lstsq 尝试解决 Ax=b 最小化 |b - Ax|。 scipy 和 numpy 都提供了一个具有非常相似接口(interface)的 linalg.lstsq 函数。文档没有提到使用哪种算法,
假设我们有两个数据数组:x = [1,2,3]y = [2,4,6]显然,线性拟合将返回 2 的斜率和 0 的截距,当然,Numpy 中的两个例程 linalg.lstsq()和 polyfit()是
我正在用 numpy.lstsq() 拟合一组数据: numpy.linalg.lstsq(a,b)[0] 返回类似的东西: array([ -0.02179386, 0.08898451, -0
我有 x,y 数据: import numpy as np x = np.array([ 2.5, 1.25, 0.625, 0.3125, 0.15625, 0.078125]) y = np.ar
我理解最小二乘解之和的想法。解的参数反射(reflect)了使平方误差最小化的系数。但我无法理解 lstsq函数可从 numpy.linalg 获得。例如,我尝试了以下方法: m1 = np.asar
我正在研究一些图像分析算法,并尝试使用 numpy 进行最小二乘拟合。为了说明我正在尝试做什么,我生成了一个非常简单的测试用例: A = np.zeros((2, 2)) A[0, 0] = 1 A[
我正在使用 linalg.lstsq 在这样的函数内构建回归线: def lsreg(x, y): if not isinstance(x, np.ndarray): x =
我有一组 (x, y, z) 点,我需要找到最适合它们的平面。平面由其系数定义为: a*x + b*y + c*z + d = 0 或等同于: A*X +B*y + C = z 第二个方程只是第一个方
因此,我尝试在输入一组数据点时使用线性回归来显示趋势线。我正在使用 Tkinter 获取数据输入,然后将它们转换为 float 以将它们放入列表中。不过,我在运行程序时收到此错误代码。 Exc
使用 numpy.linalg.lstsq 运行多元线性回归后,我得到了 4 个数组,如文档中所述,但我不清楚如何获取截距值。有人知道吗?我是统计分析的新手。 这是我的模型: X1 = np.arra
我正在尝试使用 numpy ( Description) 中的最小二乘解。根据网站使用“rcond”参数的新默认值:“要消除警告并使用新默认值,请使用 rcond=None,要继续使用旧行为,请使用
我正在尝试求解方程组中的 m1、m2、m3、m4,使得: y=(m1*x1)+(m2*x2)+(m3*x3)+(m4*x4) 地点: x1=[x11,x12,x13...] x2=[x21,x22,x
我正在执行如下的最小二乘回归(单变量)。我想用 R^2 来表达结果的重要性。 Numpy 返回一个未缩放的残差值,这是对其进行归一化的明智方法。 field_clean,back_clean = ri
我正在比较 C++ 和 Python 计算的数值结果。在 C++ 中,我利用 LAPACK 的 sgels 函数来计算线性回归问题的系数。在 Python 中,我使用 Numpy 的 linalg.l
我正在尝试将 x,y,z 现实世界坐标转换为我自己的 x,y,z 虚拟世界坐标。由于获取现实世界坐标时存在噪音,我需要使用最小二乘法。我有 3 个变量作为输入:r_x,r_y,r_z,我需要有 3 个
据我了解,numpy.linalg.lstsq和 sklearn.linear_model.LinearRegression两者都寻找线性系统 Ax = y 的解决方案 x,使残差和 ||Ax - y
我有一个使用 scipy.linalg.lstsq 函数的拟合 3D 数据集。 我正在使用: # best-fit quadratic curve A = np.c_[np.ones(data.
我对 numpy.linalg.lstsq 有以下调用: http://docs.scipy.org/doc/numpy/reference/generated/numpy.linalg.lstsq.
给定一组 3D 点,一般问题是找到以下形式的平面方程的 a, b, c 系数: z = a*x + b*y + c 使得生成的平面是该组点的最佳拟合。 在this SO answer , 函数 sci
我是一名优秀的程序员,十分优秀!