[英]Trying to put all the values below and above the main diagonal equal to 0 in a matrix
所以我把除主對角線以外的所有零都填上的功能是一團糟,它沒有做這項工作。
第一個函數將減去矩陣的一條線上的每個入口(一個主要對角線入口*(一個主要對角線入口*(一個主要對角線入口/一個入口在主入口下方或上方)。 (對不起我的英語不好)
def subtract_lines(m,r,x,y):
for i in range(r,r + 1):
for j in range(0,m.shape[1]):
m[i,j] = m[i,j] - (y * (x / y))
return m
第二個函數應該給我這樣的答案: numpy.array([[[4.0,2.0,3.0],[3.0,4.0,3.0],[2.0,5.0,6.0]] = array([[ x., 0., 0.],[ 0., x., 0.],[0., 0., x.]]) x = 隨機數。(我希望我的代碼中有這個結果)
def all_zeros(m):
for i in range(0,m.shape[0]):
for j in range(0,m.shape[1]):
for l in range(0,m.shape[0]):
for c in range(0,m.shape[1]):
if i == j and l != i:
subtract_lines(m,l,m[l,j],m[i,j])
return m
如果有人能理解我在說什么並能幫助我,我將不勝感激!
(我並不完全確定我是否正確解釋了您的問題,但我沒有足夠的聲譽來澄清評論,因此這是我最好的回答嘗試。)
Numpy 有一些輔助函數,它們似乎可以為您節省大量工作:如果m
是具有 n 行和 n 列的矩陣,則m.diagonal()
是具有 1 行和 n 列的矩陣,表示矩陣的對角線條目為了。 函數numpy.fill_diagonal(m, x)
將用值x
(或x
的值按順序填充矩陣的對角線單元格,如果 x 是包含要放置的值的列表、矩陣或類似數據類型在對角線上)。
具體的我不是很清楚。 目的subtract_lines
,它會幫助我了解,如果你喜歡你與其他功能做了一個例子輸入所需的輸出。
很抱歉在這里遲到了。 我只是要回答標題中的問題:“如何將矩陣中對角線上方和下方的所有值都設置為零。”
它很簡單:
import numpy as np
arr = np.array([[1,2,3], [4, 5, 6], [7, 8, 9]])
for i in range(arr.shape[0]):
for j in range(arr.shape[1]):
if i == j:
# We are on a diagonal, do nothing
continue
else:
arr[i,j] = 0
如果您只想將“上”三角形設置為零,則可以使用以下命令:
import numpy as np
arr = np.array([[1,2,3], [4, 5, 6], [7, 8, 9]])
for i in range(arr.shape[0]):
for j in range(arr.shape[1]):
if i > j:
# We are above the diagonal
arr[i,j] = 0
else:
continue
最后,如果您只想將下對角線設置為零:
import numpy as np
arr = np.array([[1,2,3], [4, 5, 6], [7, 8, 9]])
for i in range(arr.shape[0]):
for j in range(arr.shape[1]):
if i < j:
# We are below the diagonal
arr[i,j] = 0
else:
continue
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.