Python Can';t将输入数组从形状(3,1)广播到形状(3,)

Python Can';t将输入数组从形状(3,1)广播到形状(3,),python,numpy,Python,Numpy,这是qr分解码,但我不知道为什么会出错。 值错误发生在V[k:m,k]=V 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.no

这是qr分解码,但我不知道为什么会出错。 值错误发生在
V[k:m,k]=V

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) 

V[k:m,k]=V
v
具有形状(3,1),但目标是(3,1)
k:m
是一个3项切片
k
是一个标量

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


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

另一种方法是通过转置:

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

另一个可行的解决方案是
V[k:m,k:k+1]=V

k:k+1
是一个1项切片,形成目标形状(3,1)


这似乎是一个更好的解决方案,因为您不必修改输入数组。

我必须重塑V[k:m,k],因为它的形状是(3),而V的形状是(3,1)。但是我做不到。。
V[k:m,k] = v.transpose()