ora*_*nge 3 python arrays numpy
我能够在我的程序中优化一些操作numpy.当我描述一个跑步时,我注意到大部分时间花在了numpy.nan_to_num.我想进一步改善这一点.
发生的计算类型是两个数组的乘法,其中一个数组可以包含nan值.我希望这些被视为零,但是我不能用零初始化数组,因为nan后面有一个含义,不能设置为0.有没有办法做乘法(和加法)nan被视为零零?
从nan_to_num文档字符串中,我可以看到生成一个新数组,这可以解释为什么它需要这么长时间.
将nan替换为零,使用有限数字替换inf.
返回一个数组或标量,用零替换非数字(NaN),...
像nansum任意算术运算一样的函数会很棒.
这是一些示例数据:
import numpy as np
a = np.random.rand(1000, 1000)
a[a < 0.1] = np.nan # set some random values to nan
b = np.ones_like(a)
Run Code Online (Sandbox Code Playgroud)
一个选项是用于np.where将结果的值设置为0,只要其中一个数组等于NaN:
result = np.where(np.isnan(a), 0, a * b)
Run Code Online (Sandbox Code Playgroud)
如果必须对包含NaN的数组执行多个操作,则可以考虑使用掩码数组,这些数组提供了处理缺失值或无效值的更通用方法:
masked_a = np.ma.masked_invalid(a)
result2 = masked_a * b
Run Code Online (Sandbox Code Playgroud)
在这里,result2是另一种np.ma.masked_array其.mask属性是根据在NaN值均设置a.要将np.ndarray屏蔽值替换为0 来将其转换回法线,您可以使用该.filled()方法,传入您选择的填充值:
result_filled = result2.filled(0)
assert np.all(result_filled == result)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5053 次 |
| 最近记录: |