python - Python:是否有一个 NumPy 函数在掩码为真时从一个数组中获取,而在掩码为假时从另一个数组中获取?
问题描述
我希望将数组numerators
除以数组denominators
,但其中的某些元素denominators
可能为零。这些索引处的结果元素也应该为零。NumPy 中是否有一个函数可以从不为零的元素中选择元素,numerators / denominators
否则denominators
从零数组中选择元素?
我研究了布尔屏蔽,但这需要多行,因为我必须屏蔽denominators
才能不出现任何除零错误,以及将这些元素设置为零的结果。
我可以发誓我见过这样的功能,但我再也找不到了。
解决方案
您有多种选择:
从 numpy 版本 1.7开始, Ufunc 之类
np.divide
的支持掩码:where
quotients = np.divide(numerators, denominators, out=np.zeros(np.broadcast(numerators, denominators).shape, where=denominators != 0)
使用掩码数组:
quotients = (numerators / np.ma.array(denominators, mask=denominators)).data
这将屏蔽所有分母为零的元素,在不更改它们的情况下执行除法,并提取未屏蔽的数组。
手动使用遮罩。这将不止一行,但您可以将其转换为函数以供将来使用:
quotients = np.zeros(np.broadcast(numerators, denominators).shape) mask = ~denominators quotients[mask] = numerators[mask] / denominators[mask]
或者
quotients = np.empty(np.broadcast(numerators, denominators).shape) mask = ~denominators quotients[mask] = numerators[mask] / denominators[mask] quotients[mask] = 0
在这种情况下,对使用的下意识反应np.where
不起作用。您最终会预先计算numerators / denominators
,如 中np.where(denominators, numerators / denominators, 0)
,这违背了整个目的。或者,您最终将掩码替换为np.where(denominators)
,但此时掩码更有效。
推荐阅读
- python - pycrypto 适用于 python2.7 而不是 python3.6
- c - 在不使用浮点数的情况下确定给定整数是否是 C 中的斐波那契数列的元素
- sql - 通过命令行生成 SQL 脚本
- sql - 我想选择逗号前后的值
- node.js - Node-sass,node-gyp 错误,如何修复?
- ssh - 我可以在命令行上覆盖 Ansible SSH 密钥库存变量 ansible_ssh_private_key_file 吗?
- javascript - Jquery ajax 在 laravel 5.6 中不起作用
- delphi - Delphi,TEdit 文本作为动作触发器
- java - 图算法找到一个节点的最可能的祖先
- javascript - Angular4 - 在 JavaScript 文件中使用函数