【发布时间】:2022-12-04 01:02:18
【问题描述】:
我发现我的程序无法通过赋值语句覆盖 for 循环中的 np.ndarray(X 变量),例如“X[i] = another np.ndarray with matched shape”。我不知道这怎么会发生...
代码:
import numpy as np
def qr_tridiagonal(T: np.ndarray):
m, n = T.shape
X = T.copy()
Qt = np.identity(m)
for i in range(n-1):
ai = X[i, i]
ak = X[i+1, i]
c = ai/(ai**2 + ak**2)**.5
s = ak/(ai**2 + ak**2)**.5
# Givens rotation
tmp1 = c*X[i] + s*X[i+1]
tmp2 = c*X[i+1] - s*X[i]
print("tmp1 before:", tmp1)
print("X[i] before:", X[i])
X[i] = tmp1
X[i+1] = tmp2
print("tmp1 after:", tmp1)
print("X[i] after:", X[i])
print()
print(X)
return Qt.T, X
A = np.array([[1, 1, 0, 0], [1, 1, 1, 0], [0, 1, 1, 1], [0, 0, 1, 1]])
Q, R = qr_tridiagonal(A)
输出(前 4 行):
tmp1 before: [1.41421356 1.41421356 0.70710678 0. ]
X[i] before: [1 1 0 0]
tmp1 after: [1.41421356 1.41421356 0.70710678 0. ]
X[i] after: [1 1 0 0]
虽然 X[i] 由 tmp1 分配,但数组 X[i] 或 X[i, :] 中的值保持不变。希望有人能帮帮我....
其他信息:以上是使用 Givens 旋转计算三对角矩阵 QR 分解的函数。
我确实检查过为 X[i] 分配常量值是否有效,例如X[i] = 10 那么打印出来的结果就符合这个说法。但是如果 X[i] = someArray 那么在我的代码中它会失败。我不确定这是否是我在上述代码中实现的算法触发的特定问题,因为这种情况以前从未发生过。
我确实尝试使用 conda 安装新环境以确保我的 python 没有问题。以上奇怪的输出应该能够在其他设备上重新生成。
【问题讨论】:
-
A是intdtype。它不能采用浮点值。 -
@hpaulj 非常非常感谢!!!!
标签: python numpy multidimensional-array