从另外2个矩阵中导出矩阵值

时间:2018-03-07 15:53:02

标签: python-3.x numpy

假设您有Matrix A。

5x3 A matrix

假设我们还有Matrix C

5x3 C Matrix

如果我们有A = B x C并且我们想找出我认为应该是3x3的B矩阵值(如果我错了就纠正我) < / p>

我们需要在这里使用矩阵求逆吗?多年来我没有使用代数。

我还没有代码,但是如果有人可以提供一个很棒的代码片段。

这是我在图像处理中遇到的问题,其中A,C保持RGB值。

提交的矩阵仅供参考。

我正在尝试使用Python numpy来解决这个问题 我希望有人可以帮忙。

2 个答案:

答案 0 :(得分:1)

你的矩阵应该是5x5。当我们处理非平方矩阵时,您可以使用C的广义逆来获得B:

import numpy as np

np.random.seed(10)

A = np.random.randint(0,9,(5,3))
C = np.random.randint(0,9,(5,3))

B = np.matmul(A,np.linalg.pinv(C))

print B

答案 1 :(得分:0)

根据percusse的评论,您可以使用numpy.linalg.lstsq执行此操作。但是,这假设我们正在执行矩阵左划分,但情况是你的问题是正确划分。

使用您使用B = A / C解决B的事实,lstsq解决了A \ C类型的问题。要将其转换为lstsq的表单,我们可以通过以下方式将其转换为后一个问题:

B = A / C = (C' \ A')'

'运算符是转置。以上是通过线性代数规则找到的。具体来说,执行两个转置:((A / C)')',其中转换矩阵两次只是其自身的结果。此外,知道(AC)'等于C'A'并且对于矩阵,转置的倒数等于倒数的转置,你应该得到上述关系。

因此:

B = numpy.linalg.lstsq(C.T, A.T)[0].T

lstsq的输出是一个元组,其中第一个元素是实际解决方案。

请注意,对于您的特定示例,C是排名不足的矩阵,因此您无法从AB正确重建C