簡體   English   中英

Python 中的矩陣運算

[英]Matrix operations in Python

我想寫一個 function 以便它需要一個矩陣、一個行號和一個列號。 此后僅使用行操作獲得矩陣,使得 A(i,j) position 中的 1 和第 i 列中所有其他位置的零。 我是 Python 的新手。 請給我一些幫助。 謝謝你。

我是如何開始的,

import numpy as np

def A = np.array([B]) # 矩陣 B 尚未提供

def i = A[i,:]

def j= A[:,j]

但這似乎不起作用!

`

import numpy as np

m = np.array([[1, 1, 1, 1],[2, 2, 2, 2],[3, 3, 3, 3]])


def func(matrix, col, row):
    matrix[:, col] = 0
    matrix[row, col] = 1


func(m, 1, 1)

print(m)`

希望能幫助到你:)

設置:

import numpy as np          
from functools import reduce

N = 6
A = np.random.randint(0,10,(N,N))
i,j = np.random.randint(0,N,2)
A
# array([[8, 9, 8, 1, 9, 4],
#        [0, 3, 5, 4, 5, 2],
#        [2, 7, 4, 6, 2, 7],
#        [9, 8, 1, 5, 1, 9],
#        [0, 1, 0, 8, 0, 3],
#        [3, 4, 5, 0, 6, 7]])
i,j
# (5, 1)

幫手:

I = np.identity(N)                    
e = I[:,None]      # standard base row vectors                   
eT = I[...,None]   # standard base column vectors                                             

行操作:

rowops = [I + eT[i]@e[i]*(1/A[i,j]-1)] + [I - (eT[k]*A[k,j])@(e[i]/A[i,j]) for k in range(6) if k!=i]                          

第一個縮放第 i 行。 其他人從第 k 行中減去第 i 行乘以一個因子。

讓我們一一應用它們並跟蹤第 j 列:

B = A.copy()                       
for r in reversed(rowops):
    print(B[:,j])
    B = r@B
# [9 3 7 8 1 4]
# [9. 3. 7. 8. 0. 4.]
# [9. 3. 7. 0. 0. 4.]
# [9. 3. 0. 0. 0. 4.]
# [9. 0. 0. 0. 0. 4.]
# [0. 0. 0. 0. 0. 4.]
print(B[:,j])
# [0. 0. 0. 0. 0. 1.]

現在讓我們通過將所有 rowop 相乘來將它們組合成一個 op:

combined = reduce(np.matmul,rowops)

當應用於A時,這確實給出了相同的結果

np.allclose(combined@A,B)
# True

我們可以直接獲得這個組合操作:

R = I + (eT[i]-A@eT[j])@e[i]/A[i,j]

查看:

np.allclose(combined,R)
# True

適用於 A:

R@A
# array([[  1.25,   0.  ,  -3.25,   1.  ,  -4.5 , -11.75],
#        [ -2.25,   0.  ,   1.25,   4.  ,   0.5 ,  -3.25],
#        [ -3.25,   0.  ,  -4.75,   6.  ,  -8.5 ,  -5.25],
#        [  3.  ,   0.  ,  -9.  ,   5.  , -11.  ,  -5.  ],
#        [ -0.75,   0.  ,  -1.25,   8.  ,  -1.5 ,   1.25],
#        [  0.75,   1.  ,   1.25,   0.  ,   1.5 ,   1.75]])

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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