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
value error :
could not broadcast input array from shape (3,1) into shape (3)
答案 0 :(得分:15)
V[k:m,k] = v
; v
具有形状(3,1),但目标是(3,)。 k:m
是一个3个术语的片段; k
是标量。
尝试使用v.ravel()
。或V[k:m,[k]]
。
但也理解为什么v
有其形状。
答案 1 :(得分:0)
另一个可行的解决方案是V[k:m,k:k+1] = v
。
k:k+1
是1个词条,目标形状为(3,1)。
这似乎是一个更好的解决方案,因为您不必修改输入数组。
答案 2 :(得分:-1)
其他方法是通过转置:
V[k:m,k] = v.transpose()