2013-02-15 29 views
2

我有一套6個方程式,我想讓numpy爲我解決。所以我構造了一個6×6的係數矩陣,並用各種值填充它。然而,我最終編寫的代碼是很難理解的,並且對於我想向我的代碼讀者解釋的方程式幾乎沒有提及。是否有一個更清晰的方法來解決具有numpy的線性方程組?

例如,填寫所述係數矩陣看起來像這樣:

# Coefficients matrix 
# Order of variables: w, X, Y, Z, s, t 
A = np.mat(np.zeros((6,6))) 

A[0:3,0] = cam_inv[...,2] 
A[0:3,1:4] = -np.identity(3) 
A[3:6,1:4] = np.identity(3) 
A[3:,4] = -eigvecs[...,0] 
A[3:,5] = -eigvecs[...,1] 

# Constants matrix (RHS of equation) 
b = np.mat(np.zeros((6,1))) 
b[0:3,0] = -cam_inv[...,0:2] * point 
b[3:,] = mean.T 

res = np.linalg.solve(A,b) 

(凡cam_inv,eigvecs,平均值和點是一些其它基質別處計算)

顯然上面的代碼可以有更多的評論,但我覺得即使有一些評論,它仍然不能真正傳達正在解決的基本方程。有沒有更好的方法將方程式輸入解算器,使代碼更清晰易讀?

+0

嗯,它完全特定於您的問題,不是嗎?這是一些計算機視覺應用嗎?它可能不適合整潔的代碼,但你可以在上面的一個很好的大評論中寫出矩陣的元素,參考你正在實現的公式/技術/論文 – YXD 2013-02-15 15:15:29

+0

確實,人們可以 - 然而,它感覺像這是許多人以前必須遇到的問題,所以似乎應該有一個更好的界面來處理這種情況。 (是的,這是一個計算機視覺應用程序。) – 2013-02-15 15:18:25

回答

1

問題是表示等式的A的行沒有一行一對一的映射到代碼行。我在自己的工作(經濟學)中所做的工作是爲每個A行創建一個明確的英文名稱(或至少一行代碼,沒有功能表示)的功能。必要時,我有一個明確的但代碼的速度較慢或者可能更長,與我最終使用的代碼完全相同。因此,例如(從Bretscher的線性代數與應用程序1997年出版,37頁29頁,這是一個簡單的,如果不現實的例子),考慮一個有三個行業的經濟體I1,I2,I3,每個行業都將另外兩個行業產出作爲投入。他們應該生產什麼樣的產品來滿足消費者和工業需求?

A =np.zeros((3,3)) 
#Each unit of production by I1 requires 0.1 units of good 2 and .2 of good 3 
A[:,0] = [0, 0.1, 0.2] 
#Each unit of production by I2 requires 0.2 units of good 1 and .5 of good 3 
A[:,1] = [0.2, 0, 0.5] 
#Each unit of production by I3 requires 0.3 units of good 1 and .4 of good 2  
A[:,2] = [0.3, 0.4, 0] 
#The required production for consumers. 
b = np.array([320,150,90]).reshape(-1,1) 
#The optimal production levels of x1, x2, and x3 
res = np.linalg.solve(A,b) 

它可能會更慢或更簡潔,做我的建議,但它會更清晰地閱讀。

相關問題