簡體   English   中英

嘗試將主對角線下方和上方的所有值都等於 0 放入矩陣中

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

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