python - 使用列表推导对多个数组执行 cumsum
问题描述
我正在尝试编写一个代码,它检查np.cumsum()
两者a
并b
分为正值和负值。所以对于输出中的第一行,[12, 101, 111]
它结合了所有超过 0 的值[12, 12+89, 12+89+10]
。第一行和第二行的输出是超过 0 的 cumsum 值,第三和第四行的值是低于 0 的 cumsum 值。我如何能够将该功能添加到列表中下面的理解并得到下面的预期输出?
a = np.array([12, -5, -55, 89, 10, -5.5])
b = np.array([-5, -4.5, 12.4, 11, 16])
Sum_long_profits = [(row > 0).cumsum() for row in [a, b]]
预期输出:
[[12, 101, 111],
[12.4, 23.4, 39.4],
[-5, -60, -65.5],
[-4, -9.5]]
解决方案
一种方法:
import numpy as np
a = np.array([12, -5, -55, 89, 10, -5.5])
b = np.array([-5, -4.5, 12.4, 11, 16])
sum_long_profits = [row[row > 0].cumsum() for row in [a, b]] + [row[row < 0].cumsum() for row in [a, b]]
print(sum_long_profits)
输出
[array([ 12., 101., 111.]), array([12.4, 23.4, 39.4]), array([ -5. , -60. , -65.5]), array([-5. , -9.5])]
作为仅一个列表理解的替代方案,您可以执行以下操作:
import numpy as np
from operator import lt, gt
a = np.array([12, -5, -55, 89, 10, -5.5])
b = np.array([-5, -4.5, 12.4, 11, 16])
sum_long_profits = [row[operation(row, 0)].cumsum() for operation in [gt, lt] for row in [a, b]]
print(sum_long_profits)
输出
[array([ 12., 101., 111.]), array([12.4, 23.4, 39.4]), array([ -5. , -60. , -65.5]), array([-5. , -9.5])]
推荐阅读
- python - 浏览器自动化的noip更新问题
- node.js - NodeJS API 说证书已过期,但尚未过期
- linux - 使用 Ansible 扩展卷组
- javascript - 减少对象,按键分组
- php - 为什么显示错误处理包 mysql-server-8.0 (--configure)?
- java - 如何通过数据库在 TypeScript 类中定义属性?
- javascript - 如何在 extJS 树形面板中显示图像而不是文本
- elasticsearch - ElasticSearch 从每个类别中挑选一款得分最高的产品
- javascript - 使用 Javascript 分享到 Instagram 动态
- database - 从 Drupal 7 迁移到 Drupal 9