因为我可以对数组执行操作,所以对对角线不执行任何操作 计算得出除了对角线之外的所有内容
array ([[0., 1.37, 1., 1.37, 1., 1.37, 1.]
[1.37, 0. , 1.37, 1.73, 2.37, 1.73, 1.37]
[1. , 1.37, 0. , 1.37, 2. , 2.37, 2. ]
[1.37, 1.73, 1.37, 0. , 1.37, 1.73, 2.37]
[1. , 2.37, 2. , 1.37, 0. , 1.37, 2. ]
[1.37, 1.73, 2.37, 1.73, 1.37, 0. , 1.37]
[1. , 1.37, 2. , 2.37, 2. , 1.37, 0. ]])
避免 NaN 值,但在所有响应中保留对角线上的值零
最佳答案
我想知道屏蔽数组是否可以做你想要的事情,例如,
import numpy as NP
A = NP.random.random_integers(0, 9, 16).reshape(4, 4)
dg = NP.r_[ [NP.nan] * 4 ] # proper syntax is 'nan' not 'NaN'
dg = NP.diag(dg)
A += dg # a 4x4 array w/ NaNs down the main diagonal
NP.sum(A, axis=1) # doesn't work, gives: array([ NaN, NaN, NaN, NaN])
from numpy import ma as MA
Am = **MA.masked_invalid**(A)
NP.sum(Am, axis=1) # now it works (treats 'nan' as 0)
当然,另一种方法是首先将 NaN 转换为 0,然后 屏蔽 0:
NP.nan_to_num(A)
MA.masked_equal(A, 0)
最后,一步屏蔽并转换 NaN 通常非常有效:
MA.fix_invalid(A)
非常简单,只需记住“ma”可能尚未出现在您的命名空间中,而且这些函数处理“NaN”和“infs”,这通常是您想要的。
关于python - 对 NumPy 数组执行运算,但从这些运算中屏蔽沿对角线的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1803860/