我想生成对称的零对角矩阵。我的对称部分工作,但当我使用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)
答案 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
但是问题就变成了“通过这种方式,到底谁会对此感到惊讶?”