我正在寻找用于进行数组计算的最有效和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]])
我知道我可以分别对每个元素进行计算,但我想知道是否有人能想出一个创造性和更快的算法。
干杯,
答案 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]])