我有一个指标数组a
,它包含一个1
,如果最后一个0
的索引应该被复制。否则,当前运行索引将通过:
也就是说
a = np.array([0, 1, 1, 1, 0, 0, 0, 1, 1, 0, 1])
i = np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
预期产量
x = np.array([0, 0, 0, 0, 4, 5, 6, 6, 6, 9, 9])
再次说明:逻辑:
y
a[y] == 0
:返回i[y]
a[y] == 1
:返回i[yy]
,其中yy
是max yy < y: a[yy] == 0
-其中a
是0
的“上一个索引”。你知道吗a[0] == 0
,总是。你知道吗
我设法完成的任何方法都使用递归方法/循环,而且根本没有效率。什么是快速计算x
?你知道吗
为了快速编写代码,我知道应该使用可能性较小的
if
、nofor
(包含while和try/except)、预分配变量,并使用numpy数组。你知道吗这里有一种使用
masking
和maximum-accumulation
与np.maximum.accumulate
的矢量化方法-另一种说法是-
解释
为了深入了解故事的细节,我们来分解一下步骤-
1]输入:
2]所以,输入
a
是:3]获取覆盖长度为
a
的范围数组:4]现在在a为1的位置屏蔽范围数组,留下与a为0对应的元素:
5]根据需要使用最大累积量来创建斜坡结构:
6]最后用这些数字索引到i中,以获得所需的输出:
运行时测试
接近-
计时-
让我们平铺给定的示例以创建更大的数据集,并测试所有解决方案:
我这样做:
它是一个只在列表中迭代一次的循环,因此没有嵌套循环或递归。这样的话,时间成本将是O(N),N是
a
的长度相关问题 更多 >
编程相关推荐