我有一个由0和1组成的数组。我想计算所有连续1的累积和,每次遇到0时重置,使用numpy,因为我有数千个包含数千行和列的数组。
我可以用循环来做,但我怀疑它不会有效。你有一个更聪明和快速的方法来运行它的数组吗?下面是输入和预期输出的简短示例:
import numpy as np
arr_in = np.array([[1,1,1,1,1,1], [0,0,0,0,0,0], [1,0,1,0,1,1], [0,1,1,1,0,0]])
print(arr_in)
print("expected result:")
arr_out = np.array([[1,2,3,4,5,6], [0,0,0,0,0,0], [1,0,1,0,1,2], [0,1,2,3,0,0]])
print(arr_out)
运行时:
[[1 1 1 1 1 1]
[0 0 0 0 0 0]
[1 0 1 0 1 1]
[0 1 1 1 0 0]]
expected result:
[[1 2 3 4 5 6]
[0 0 0 0 0 0]
[1 0 1 0 1 2]
[0 1 2 3 0 0]]
2条答案
按热度按时间nbnkbykc1#
可以计算1的
cumsum
,然后识别0并向前填充累积和以减去它:输出:
第二个示例的输出:
7cjasjjr2#
使用
numba.vectorize
,您可以定义一个定制的numpy
ufunc用于累加。产出