python - 使用列表理解对多个数组执行 cumsum

标签 python arrays numpy for-loop multidimensional-array

我正在尝试编写一个代码来检查 np.cumsum()两者 ab分为正值和负值。所以对于输出中的第一行 [12, 101, 111]它组合了所有大于 0 的值 [12, 12+89, 12+89+10] 。第一行和第二行的输出是超过 0 的累积和值,第三行和第四行的输出是低于 0 的累积和值。我如何才能将该功能添加到列表中理解下面的内容并得到下面的预期输出?

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 - 使用列表理解对多个数组执行 cumsum,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69521547/

相关文章:

java - 如何在接收数组的 MySQL 列中指定数据类型?

python - 将 numpy.array 存储在 Pandas.DataFrame 的单元格中

python - Watson API 返回 408 状态代码

arrays - 带有 numpy 数组的 Pandas 数据框值

javascript - 在 ES2016 或更高版本中,像这样的列表推导式相当于什么?

python - 从 python 嵌套列表在 pandas 中创建新列

python-2.7 - DICT() 和 MATPLOTLIB?

python - python日志记录是否支持多处理?

python - Scrapy 抓取过期域名

python - 运行时警告 : divide by zero encountered in true_divide W = 1/sigma**2/s_sq symfit