将子矩阵关联到numpy中的矩阵

时间:2020-11-06 13:33:12

标签: python numpy

我写了一些代码来计算将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]]

这没有道理。

它们为什么打印不同? 如果这种分配不起作用,还有其他明智的方法吗?

1 个答案:

答案 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的有关索引编制/分配的信息:

请注意,如果将较高的类型分配给较低的类型(例如将浮点数分配给整数),甚至将异常(将复数分配给浮点数或整数),分配都可能导致更改: