【发布时间】:2020-11-06 22:46:46
【问题描述】:
我写了一些代码来计算 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]]
这没有意义。
为什么它们的打印方式不同? 如果这种分配不起作用,还有其他聪明的方法吗?
【问题讨论】:
-
什么是
sgn- 我们无法运行您的代码 - 请阅读 minimal reproducible example。也许您可以将示例简化为一些简单的任务 - 查看您的代码应该可以工作。 -
我用这个
A矩阵得到了RuntimeWarning: invalid value encountered in true_divide v = v/np.linalg.norm(v),我把A改成了np.array([[1,2,3], [2.5,4,5], [1,3,2]]),结果看起来很正常。 -
看起来你的问题是:
How do I assign floats to an array of ints或类似的东西。我想在 SO 或文档中有答案。