如何解决替换方阵中的 nan 值
我是第一次使用 numpy
。
我有一个方阵(158 x 158)。我想用对角线的中值替换矩阵对角线上的任何 NaN
值。我想为零的任何非对角线值。
我写的代码不起作用,
cov_martix = np.cov(np.transpose(coeff),rowvar=False)
# any nan's on the diagional are replaced by the median value of the diag
# any nan's off the diag are replaced with zero
diag = np.nanmedian(np.diag(cov_martix))
cov_martix = np.fill_diagonal(cov_martix,diag)
cov_martix = np.nan_to_num(cov_martix)
问题在于 np.fill_diagonal
行,运行该行后 cov_martix
变为 None
。我不确定我做错了什么。
解决方法
更改这一行:
cov_martix = np.fill_diagonal(cov_martix,diag)
到
np.fill_diagonal(cov_martix,diag)
编辑:同时删除最后一行中的 cov_matrix=
此函数就地修改输入数组,它不返回值。
因此产生None
。您不应该将它重新分配回数组。
此外,您不是用对角线的 nan
替换对角线中的 median
值,而是用对角线的 median
替换所有对角线元素。
你能不能试试这个:
>>> diag = np.diag(cov_matrix)
>>> np.fill_diagonal(cov_matrix,np.nan_to_num(diag,nan=np.nanmedian(diag)))
>>> cov_matrix = cov_matrix * np.eye(cov_matrix.shape[0])
例如:
>>> cov_matrix
array([[ 2.,0.,4.,4.],[ 1.,2.,1.],nan,3.],[ 2.,1.,1.]])
>>> diag = np.diag(cov_matrix)
>>> np.nan_to_num(diag,nan=np.nanmedian(diag))
array([2.,1.])
>>> np.fill_diagonal(cov_matrix,nan=np.nanmedian(diag)))
>>> cov_matrix
array([[2.,[1.,[2.,1.]])
>>> cov_matrix = cov_matrix * np.eye(cov_matrix.shape[0])
>>> cov_matrix
array([[2.,0.],[0.,1.]])
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。