簡體   English   中英

交換行以形成對角占優矩陣

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM