python - 对 NumPy 数组执行运算,但从这些运算中屏蔽沿对角线的值

标签 python arrays numpy scipy

因为我可以对数组执行操作,所以对对角线不执行任何操作 计算得出除了对角线之外的所有内容

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/

相关文章:

python - 使现有数据库适应 Django 应用程序

python - spacy:为荷兰语 (nl) 添加词形还原器查找

python - 单机和库?

java - 从文本文件中读取整数并将其放入二维数组中 (Java)

c# - 简单的 C# 数组抛出 OutOfMemory 异常

Python:numpy fftn 在 numpy 数组列表上

python - sklearn.model_selection.train_test_split出现Python错误:ValueError:找到输入变量的样本数不一致:[416858,398427]

python - 为什么 list 会询问 __len__?

java 。查找数组列表中出现次数最多的字符串长度

python - 移动 dask 数据框中的所有行