- 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/
Scipy 和 Numpy 在它们之间具有三个不同的函数来查找给定方阵的特征向量,它们是: numpy.linalg.eig(a) scipy.linalg.eig(a) , 和 scipy.spar
这是我的 numpy 数组: z [[ 3.90311860e-322 1.83939721e-001] [ 0.00000000e+000 1.83939721e-001] [ 0
公认的智慧是更喜欢 scipy.linalg 而不是 numpy.linalg 函数。为了进行线性代数,理想情况下(并且方便地)我想结合 numpy.array 和 scipy.linalg 的功能,
有人知道什么时候最好选择哪个吗?在我看来,它们是一样的... lsmr lsqr 最佳答案 两种软件包的功能相同。 LSMR基于2010年的Fong&Saunders算法(请参阅paper),并且最近
如果我们想通过使用正规方程来搜索线性回归模型的最佳参数 theta: theta = inv(X^T * X) * X^T * y 第一步是计算 inv(X^T*X)。因此 numpy 提供 np.l
要求解线性矩阵方程,可以使用 numpy.linalg.solve它实现了 LAPACK 例程 *gesv . 根据文档 DGESV computes the solution to a real s
问题描述 对于方阵,可以得到SVD X= USV' 分解,通过简单地使用 numpy.linalg.svd u,s,vh = numpy.linalg.svd(X) 例程或 numpy.lin
有没有办法提高numpy.linalg.eig()和scipy.linalg.eig()的输出精度? 我正在对角化一个非对称矩阵,但我希望在物理基础上得到正负特征值对的实谱。事实上,特征值确实成对出现
lstsq 尝试解决 Ax=b 最小化 |b - Ax|。 scipy 和 numpy 都提供了一个具有非常相似接口(interface)的 linalg.lstsq 函数。文档没有提到使用哪种算法,
如果我有一个由五个向量 v1...v5 组成的向量空间,则找到 A 的正交基,其中 A=[v1,v2...v5] 且 A 为 5Xn 我应该使用np.linalg.qr(A)还是scipy.linal
我必须求解 x 的大量“Ax=B”类型的线性矩阵方程,其中 A 是一个稀疏矩阵,主要填充主对角线,B 是一个向量。 我的第一种方法是通过 numpy.linalg.solve 使用密集的 numpy
我不太明白为什么 numpy.linalg.solve() 给出了更准确的答案,而 numpy.linalg.inv() 有点崩溃,给出 (我相信是)估计。 举一个具体的例子,我正在求解方程 C^{-
我有一个奇怪的现象,虽然 scipy.sparse.linalg.eigs 对于稀疏矩阵应该更快,但我知道它运行得比正常的 eigvals 方法慢scipy: In [4]: %timeit m.ca
我正在使用 Spark cluster 2.0,我想从 org.apache.spark.mllib.linalg.VectorUDT 转换一个向量至org.apache.spark.ml.linal
我有下面的代码,我使用命令 scipy.linalg.lu() 计算给定方阵的 L 矩阵,然后我再次执行相同的操作,除了然后应用于给定矩阵的稀疏形式使用 scipy.sparse.linalg.slu
我在学习SVD通过关注这个 MIT course . 矩阵构造为 C = np.matrix([[5,5],[-1,7]]) C matrix([[ 5, 5], [-1, 7]]
如何从org.apache.spark.mllib.linalg.SparseVector至org.apache.spark.ml.linalg.SparseVector ? 我正在从 mllib 转
有人可以帮我解决以下错误吗?我正在尝试将数据帧转换为 rdd,以便它可以用于回归模型构建。 Spark 版本:2.0.0 错误 => ClassCastException: org.apache.sp
我正在尝试在 Python 上实现最小二乘曲线拟合算法,我已经在 Matlab 上编写了它。但是,我无法获得正确的变换矩阵,而且问题似乎发生在求解步骤。 (编辑:我的变换矩阵在 Matlab 中非常准
前言 numpy.linalg模块包含线性代数的函数。使用这个模块,可以计算逆矩阵、求特征值、解线性方程组以及求解行列式等。本文讲给大家介绍关于numpy基础之 np.linalg的相关内容,下面
我是一名优秀的程序员,十分优秀!