我写了一些代码来计算将householder减少到Hessenberg form
V = []
m,n = A.shape
for i in range(m-1):
x = A[i+1:,i]
e1 = np.zeros(x.shape)
e1[0] = 1
v = sgn(x[0])*np.linalg.norm(x)*e1 + x
v = v/np.linalg.norm(v)
V.append(v)
vv = np.outer(v,v)
print(A[i+1:,i:]-2*vv @ A[i+1:,i:])
A[i+1:,i:] =A[i+1:,i:]-2*vv @ A[i+1:,i:]
print(A)
A[:,i+1:] = A[:,i+1:] - 2 * np.outer(A[:,i+1:] @ v,v)
我使用A =
[[1,2,3],
[2,4,5],
[1,3,2]]
第一个打印语句打印
[[-2.23606798 -4.91934955 -5.36656315]
[ 0. 0.89442719 -0.4472136 ]]
这才是有意义的。 在第二次打印时
[[ 1 2 3]
[-2 -4 -5]
[ 0 0 0]]
这没有道理。
它们为什么打印不同? 如果这种分配不起作用,还有其他明智的方法吗?
答案 0 :(得分:0)
您正在尝试将浮点数分配给一个int数组。这是一个快速解决方案-在对其进行操作之前更改dtype。
A = np.array([[1,2,3],
[2,4,5],
[1,3,2]])
b = np.array([[-2.23606798, -4.91934955, -5.36656315],
[ 0., 0.89442719, -0.4472136 ]])
A = A.astype('float64')
A[1:,0:] = b
print(A)
>>>
[[ 1. 2. 3. ]
[-2.23606798 -4.91934955 -5.36656315]
[ 0. 0.89442719 -0.4472136 ]]
>>>
来自the documentation的有关索引编制/分配的信息:
请注意,如果将较高的类型分配给较低的类型(例如将浮点数分配给整数),甚至将异常(将复数分配给浮点数或整数),分配都可能导致更改: