[英]Swapping rows to make a diagonally dominant matrix
祝大家有美好的一天。 需要啟蒙。
我試圖交換矩陣的行以使其對角占優,這就是我所做的。
B = np.array([[7,1,2],[3,1,9],[0,5,1]])
Bcopy = B
C = np.array([0,2,1])
print(f'B: {B} \nBcopy: {Bcopy} \nC: {C}')
#Output
B: [[7 1 2],
[3 1 9],
[0 5 1]]
Bcopy: [[7 1 2],
[3 1 9],
[0 5 1]]
C: [0 2 1]
B[C,:] = Bcopy
print(f'B: {B} \n Bcopy: {Bcopy}')
#Expected output
B: [[7 1 2],
[0 5 1],
[3 1 9]]
Bcopy: [[7 1 2],
[3 1 9],
[0 5 1]]
C: [0 2 1]
#Actual output
B: [[7 1 2],
[3 1 9],
[3 1 9]]
Bcopy: [[7 1 2],
[3 1 9],
[3 1 9]]
C: [0 2 1]
為什么?
所以,我又做了一個。
B = np.array([[7,1,2],[3,1,9],[0,5,1]])
Bcopy = B
C = np.array([0,2,1])
print(f'B: {B} \nBcopy: {Bcopy} \nC: {C}')
#Output
B: [[7 1 2],
[3 1 9],
[0 5 1]]
Bcopy: [[7 1 2],
[3 1 9],
[0 5 1]]
C: [0 2 1]
for i in range(3):
B[C[i],:] = Bcopy[i,:]
print(f'B: {B} \nBcopy: {Bcopy}')
print(f'Bi: {B[C[i],:]} \t Bcopyi: {Bcopy[i,:]}')
print(f'C: {C}')
#Actual output
# 1st iteration
B: [[7 1 2],
[3 1 9],
[0 5 1]]
Bcopy: [[7 1 2],
[3 1 9],
[0 5 1]]
Bi: [7 1 2] Bcopyi:[7 1 2]
# 2nd iteration
B: [[7 1 2],
[3 1 9],
[3 1 9]]
Bcopy: [[7 1 2],
[3 1 9],
[3 1 9]]
Bi: [3 1 9] Bcopyi:[3 1 9]
# 3rd iteration
B: [[7 1 2],
[3 1 9],
[3 1 9]]
Bcopy: [[7 1 2],
[3 1 9],
[3 1 9]]
Bi: [3 1 9] Bcopyi:[3 1 9]
C: [0 2 1]
我不明白第二次迭代的突然變化。
(我在 64 位計算機上使用 Python 3.9.4。)
期待一個解釋。 謝謝 !
您沒有使用Bcopy=B
制作 B 的副本。
按照下面的代碼復制您的數組,而不是使用numpy.copy() 。
import numpy as np
B = np.array([[7,1,2],[3,1,9],[0,5,1]])
Bcopy = B.copy()
C = np.array([0,2,1])
print(f'B: {B} \nBcopy: {Bcopy} \nC: {C}')
B[C,:] = Bcopy
print(f'B: {B} \n Bcopy: {Bcopy}')
output:
B: [[7 1 2]
[0 5 1]
[3 1 9]]
Bcopy: [[7 1 2]
[3 1 9]
[0 5 1]]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.