无法将形状为(3,1)的输入数组广播到形状为(3,)的数组。

20
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 这一行代码引发了ValueError错误。

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

1
我必须重新塑造V[k:m,k],因为它的形状是(3),而v的形状是(3,1)。但我做不到。 - Colin
3个回答

32

V[k:m,k] = vv的形状为(3,1),但目标是(3,)。k:m 是一个三项切片;k 是一个标量。

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

但也要理解为什么 v 有它的形状。


2
另一个可行的解决方案是V[k:m,k:k+1] = vk:k+1是一个1项切片,使目标形状为(3,1)。
这似乎是更好的解决方案,因为您不必修改输入数组。

-1

另一种方法是通过翻转:

V[k:m,k] = v.transpose()

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接