用于进行数组计算的Pythonic算法

时间:2017-03-05 18:28:39

标签: arrays algorithm performance python-2.7 numpy

我正在寻找用于进行数组计算的最有效和pythonic算法。这是问题所在:

我有一个形状数组(5,2,3),它沿轴的总和= 0如下:

A[0]+A[1]+A[2]+A[3]+A[4]

所以B基本上等于array([[232, 142, 283], [387, 367, 229]]) ,即:

B[0,0]

我想知道在总和过程的哪个阶段,B的6个元素中的每个元素都大于100.例如,元素A[0]+A[1]+A[2]经过3个步骤后超过100:B[1,1]或{经过两个步骤A[0]+A[1]后,{1}}超过100。 所以算法的最终输出应该是这个数组:

array([[3, 5, 2],
       [2, 2, 4]])

我知道我可以分别对每个元素进行计算,但我想知道是否有人能想出一个创造性和更快的算法。

干杯,

1 个答案:

答案 0 :(得分:4)

使用cumsum获取累积总和,将其与阈值进行比较,最后使用argmax将其作为跨越该阈值的第一个实例 -

(A.cumsum(axis=0) > 100).argmax(axis=0)+1

示例运行 -

In [228]: A
Out[228]: 
array([[[ 6, 15, 89],
        [49, 62, 12]],

       [[92,  8, 34],
        [93, 81, 35]],

       [[ 8, 35, 63],
        [68, 89,  5]],

       [[27, 20, 85],
        [87, 42, 90]],

       [[99, 64, 12],
        [90, 93, 87]]])

In [229]: (A.cumsum(0) > 100).argmax(0)+1
Out[229]: 
array([[3, 5, 2],
       [2, 2, 4]])