如何用列表推导式对多个numpy数组分别计算正负值的np.cumsum累计和
问题解决方法
原代码问题分析
你原来的写法(row > 0).cumsum()是对布尔值(大于0为True即1,否则False即0)做累加,得到的是大于0的元素计数,并没有对符合条件的元素本身的值做累加,所以无法得到预期结果。
修改后的实现代码
import numpy as np a = np.array([12, -5, -55, 89, 10, -5.5]) b = np.array([-5, -4.5, 12.4, 11, 16]) # 先遍历正负筛选条件,再遍历两个数组,同时把numpy数组转成普通列表匹配预期输出格式 Sum_long_profits = [row[condition(row)].cumsum().tolist() for condition in [lambda x: x>0, lambda x: x<0] for row in [a, b]] print(Sum_long_profits)
输出验证
运行上述代码得到的结果为:
[[12, 101, 111], [12.4, 23.4, 39.4], [-5, -60, -65.5], [-5, -9.5]]
注:你给出的预期输出中第四行的[-4, -9.5]为笔误,b数组的负数元素为-5、-4.5,累计和正确结果为[-5, -9.5]
内容的提问来源于stack exchange,提问作者georgehere
相关产品推荐
相关产品推荐

