Numpy fill_diagonal返回无

时间:2017-09-27 10:45:41

标签: python numpy

我想生成对称的零对角矩阵。我的对称部分工作,但当我使用numpy中的fill_diagonal作为结果我得到了#34;无"。我的代码如下。感谢您阅读

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)

2 个答案:

答案 0 :(得分:3)

np.fill_diagonal()和python / numpy中的许多其他方法一样,就地工作。例如:Why does “return list.sort()” return None, not the list?。也就是说它直接改变了内存中的对象,并没有创建新对象。此类函数的返回值为None。因此,改变:

zero_diogonal_matrix = np.fill_diagonal(symmetric_matrix,0)

只是:

np.fill_diagonal(symmetric_matrix,0)

然后,您会看到symmetric_matrix中反映的更改。

答案 1 :(得分:0)

这可能是矫kill过正,但是如果您想保留将意外最小化的宗旨,则可以将此函数(以及其他类似函数)包装在一个用于保留原始数组的函数中:

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

但是问题就变成了“通过这种方式,到底谁会对此感到惊讶?”