Python Numpy fill_对角线返回无

Python Numpy fill_对角线返回无,python,numpy,Python,Numpy,我想生成对称的零对角矩阵。我的对称部分工作,但当我使用numpy的fill_对角线作为结果时,我得到了“None”。我的代码如下。谢谢你的阅读 import numpy as np matrix_size = int(input("Size of the matrix \n")) random_matrix = np.random.random_integers(-4,4,size=(matrix_size,matrix_size)) symmetric_matrix = (random_mat

我想生成对称的零对角矩阵。我的对称部分工作,但当我使用numpy的fill_对角线作为结果时,我得到了“None”。我的代码如下。谢谢你的阅读

import numpy as np
matrix_size = int(input("Size of the matrix \n"))
random_matrix = np.random.random_integers(-4,4,size=(matrix_size,matrix_size))
symmetric_matrix = (random_matrix + random_matrix.T)/2
print(symmetric_matrix)
zero_diogonal_matrix = np.fill_diagonal(symmetric_matrix,0)
print(zero_diogonal_matrix)
np.fill\u diagonal()
,就像python/numpy中的许多其他方法一样,可以在适当的位置工作。例如:。也就是说,它直接改变内存中的对象,而不创建新对象。此类函数的返回值为
None
。因此,改变:

zero_diogonal_matrix = np.fill_diagonal(symmetric_matrix,0)
只是:

np.fill_diagonal(symmetric_matrix,0)

然后,您将看到反映在
对称矩阵
中的更改,这可能有些过分,但如果您想保留最小化意外的原则,您可以将此(以及类似的其他函数)包装在一个函数中,该函数负责保护原始数组:

def fill_diagonal(source_array, diagonal):
    copy = source_array.copy()
    np.fill_diagonal(copy, diagonal)
    return copy

但问题变成了“这样做到底谁会最不惊讶?”

@roganjosh非常感谢您的回答。那么,在这种情况下,我如何给dioganal赋值呢?@roganjosh谢谢你的回答。我也是这样做的。结果是相同的无再次对称矩阵=(随机矩阵+随机矩阵.T)/2打印(np.填充矩阵(对称矩阵,0))