NumPy的fill_diagonal函数返回None。

4

我想生成对称的零对角矩阵。我的对称部分已经实现了,但是当我使用numpy中的fill_diagonal函数时,结果却是“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)

@roganjosh非常感谢您的回复。那么,在这种情况下,我该如何将对角线赋值为零? - Dancer PhD
@roganjosh 谢谢您的回复。我也是用这种方法做的。结果仍然是 None,对称矩阵 = (随机矩阵 + 随机矩阵.T)/2 print(np.fill_diagonal(对称矩阵,0)) - Dancer PhD
2个回答

9

np.fill_diagonal()和其他许多Python/Numpy方法一样,是原地操作的。例如:为什么“return list.sort()”返回None而不是列表? 就是说它直接更改内存中的对象,而不创建新的对象。这些函数的返回值是None。因此,需要更改为:

zero_diogonal_matrix = np.fill_diagonal(symmetric_matrix,0)

仅仅是:

np.fill_diagonal(symmetric_matrix,0)

然后您将看到更改反映在symmetric_matrix中。


2

这可能有些过度,但是如果您想保留最小化意外的原则,您可以将此函数(以及其他类似函数)包装在一个函数中,该函数负责保留原始数组:

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

但问题在于,“以这种方式做,到底谁最不会感到惊讶?”

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接