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