python - 在 numpy 中计算累积乘积或总和时提前中断

标签 python numpy

假设我有一个范围 r=numpy.array(range(1, 6)),并且我正在使用 numpy.cumsum(r) 计算累积和。但我不想返回 [1, 3, 6, 10, 15] 我希望它返回 [1, 3, 6] 因为累积结果的条件必须小于 10。

如果数组非常大,我希望在开始计算多余且稍后将被丢弃的值之前先突破累积和。当然,为了这个问题,我在这里轻视了一切。

是否可以根据条件提前突破 cumsumcumprod

最佳答案

我认为 numpy 中的任何函数都不可能实现这一点,因为在大多数情况下,这些函数都是用于固定长度数组上的矢量化计算。实现您想要的功能的一种明显方法是打破 Python 中的标准 for 循环(我假设您知道):

def limited_cumsum(x, limit):
    y = []
    sm = 0
    for item in x:
        sm += item
        if sm > limit:
            return y
        y.append(sm)
    return y

但这显然比 numpy 的 cumsum 慢一个数量级。

由于您可能需要一些非常专业的函数,因此在 numpy 中找到您需要的确切函数的变化很小。您可能应该看看Cython ,它允许您实现像Python函数一样灵活的自定义函数(并且使用几乎Python的语法),速度接近C。

关于python - 在 numpy 中计算累积乘积或总和时提前中断,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28266510/

相关文章:

python-3.x - 将 npz 转换为 csv 格式时出现关键错误

python - 以 numpy 数组为参数的 Cython 内联函数

Python脚本给出 `: No such file or directory`

python - Pandas 今天的日期和另一个 date_time 列之间的天数差异?

python - 有没有一种快速的方法来创建一个具有 1 和 x * 0 的向量?

python - Django 功能性 LiveServerTestCase - 使用 selenium 提交表单后,对象保存到非测试数据库

python - Django - 如何在事件前 5 天发送邮件?

python - 将索引的平面列表创建到数组中的正确正确的 numpy 方法

python - OpenCV的Cascade分类器面部检测卡住

python - 如何在 Python 中创建矩阵或将二维数组转换为矩阵?