【发布时间】:2014-02-19 19:57:58
【问题描述】:
我可以很容易地计算出类似的东西:
R = numpy.column_stack([A,np.ones(len(A))])
M = numpy.dot(R,[k,m0])
其中 A 是一个简单数组,k,m0 是已知值。
我想要一些不同的东西。固定 R、M 和 k 后,我需要获得 m0。 有没有办法通过函数 numpy.dot() 的逆来计算? 还是只能通过重新排列矩阵来实现?
【问题讨论】:
我可以很容易地计算出类似的东西:
R = numpy.column_stack([A,np.ones(len(A))])
M = numpy.dot(R,[k,m0])
其中 A 是一个简单数组,k,m0 是已知值。
我想要一些不同的东西。固定 R、M 和 k 后,我需要获得 m0。 有没有办法通过函数 numpy.dot() 的逆来计算? 还是只能通过重新排列矩阵来实现?
【问题讨论】:
M = numpy.dot(R,[k,m0])
正在执行矩阵乘法。 M = R * x。
所以要计算逆,你可以使用np.linalg.lstsq(R, M):
import numpy as np
A = np.random.random(5)
R = np.column_stack([A,np.ones(len(A))])
k = np.random.random()
m0 = np.random.random()
M = R.dot([k,m0])
(k_inferred, m0_inferred), residuals, rank, s = np.linalg.lstsq(R, M)
assert np.allclose(m0, m0_inferred)
assert np.allclose(k, k_inferred)
请注意 k 和 m0 都是确定的,给定 M 和 R(假设 len(M) >= 2)。
【讨论】: