2016-10-03 66 views
4
import numpy as np 

def qrhouse(A): 
    (m,n) = A.shape 
    R = A 
    V = np.zeros((m,n)) 
    for k in range(0,min(m-1,n)): 
     x = R[k:m,k] 
     x.shape = (m-k,1) 
     v = x + np.sin(x[0])*np.linalg.norm(x.T)*np.eye(m-k,1) 
     V[k:m,k] = v 
     R[k:m,k:n] = R[k:m,k:n]-(2*v)*(np.transpose(v)*R[k:m,k:n])/(np.transpose(v)*v) 
    R = np.triu(R[0:n,0:n])  
    return V, R 

A = np.array([[1,1,2],[4,3,1],[1,6,6]]) 
print qrhouse(A) 

这是qr分解代码,但我不知道为什么发生错误。在V[k:m,k] = v不能从形状(3,1)广播输入数组到形状(3,)

value error : 
could not broadcast input array from shape (3,1) into shape (3) 
+0

错误准确告诉你发生了什么!你为什么不谷歌“numpy广播”弄清楚它是什么?使用'V [k:m,k] = v.reshape((3,1))',它就可以工作。 – Julien

+1

我不得不重塑V [k:m,k],因为它的形状是(3),v的形状是(3,1)。但我不能这样做.. – Colin

回答

8

V[k:m,k] = v 发生的值误差; v具有形状(3,1),但目标是(3,)。 k:m是一个3学期的片段; k是一个标量。

尝试使用v.ravel()。或者V[k:m,[k]]

但也明白为什么v有它的形状。

相关问题