2017-12-12 66 views
1

の過剰決定系を解きます、私はA, B, C, Dのパラメータを解決する必要があります。は、私は、フォームの式のかなり単純なシステムを有する線形方程式

私はnumpy.linalg.lstsqで遊んでいましたが、マトリックスの形状を正しく得ることができません。これは私が失敗し

import numpy as np 

N = 10000 
x1, y1 = np.random.uniform(0., 5000., (2, N)) 
x2, y2 = np.random.uniform(0., 5000., (2, N)) 

# 1*A + 0*B + x2*C + y2*D = x1 
# 0*A + 1*B + y2*C + x2*D = y1 

l1 = np.array([np.ones(N), np.zeros(N), x2, y2]) 
l2 = np.array([np.zeros(N), np.ones(N), y2, x2]) 

M1 = np.array([l1, l2]) 
M2 = np.array([x1, y1]) 

ABCD = np.linalg.lstsq(M1, M2)[0] 
print(ABCD) 

を持っているものです。

numpy.linalg.linalg.LinAlgError: 3-dimensional array given. Array must be two-dimensional 

私が間違って何をしているのですか?

答えて

2

仕事をする必要があります

M1 = np.vstack([l1.T, l2.T]) 
M2 = np.concatenate([x1, y1]) 

に、固定の他のすべてを維持 M1を変更し M2

+0

ニース!私はすべての列を連結することを考えましたが、これはずっと短くなりました:-) – Omni

+0

これは実際に動作します。ありがとうございました! – Gabriel

0

連結が問題であり、lstsq()のパラメータも転置する必要があります。

M1 = np.hstack((l1,l2)) 
M2 = np.hstack((x1,x2)) 
ABCD = np.linalg.lstsq(M1.T,M2.T)[0] 
関連する問題