微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

将 Numpy 数组折叠为标量,例如,乘以零

如何解决将 Numpy 数组折叠为标量,例如,乘以零

我有点惊讶,我找不到一个简单的时间来折叠包含相同值的 Numpy 数组的维度。让我解释一下。

我可能需要乘以以数组形式实现的时间序列,例如 a * b。在大多数情况下,这很好,但有时 ab 是表示常量信号的标量。这也很顺利,因为 Numpy 知道如何广播它们,并且计算速度非常快(比 b一个充满相同值的数组快两倍)。

现在有时a = 0;结果,我得到了一个充满零的数组。我想将它折叠到标量 0 因为它是一个常数信号,但我似乎找不到任何简单的方法来做到这一点 - 我的意思是,不添加条件来检查 {{1 }} 或 a 为 0,每次对数组进行操作时都将其视为特例。

您知道实现这一目标的任何简单方法吗?

解决方法

测试用例是您最好的选择。 Numpy 通常不会假定知道您的数据的内容,因此它只会执行您告诉它的操作。具体来说,正如您所指出的,广播操作的结果将是广播的结果。否则将违反 Python 的最小惊喜原则。

这是我认为最简单的方法:

c = a * b
if not c.any():
    c = c[0].item()

还有其他选择。第一个想到的是使用 (c == 0).all(),但这涉及到第二个临时数组,浪费内存并有效地抵消了短路的好处。

另一种选择是预先检查 ab 是否为零。但要彻底做到这一点,您需要检查以下内容:

a = [1,2,3,0]
b = [0,1,3]

因此,简单地将两个数组相乘并随后进行检查可能是您最好的选择。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。