给定两个长度相等的数组,一个保存数据,一个保存结果但最初设置为零,例如:
a = numpy.array([1, 0, 0, 1, 0, 1, 0, 0, 1, 1])
b = numpy.array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0])
我想计算 a 中三个相邻元素的所有可能子集的总和。如果和为0或1,则b中对应的三个元素保持不变;只有当总和超过 1 时,b 中对应的三个元素才设为 1,这样计算后 b 变为
array([0, 0, 0, 1, 1, 1, 0, 1, 1, 1])
一个简单的循环将完成此操作:
for x in range(len(a)-2):
if a[x:x+3].sum() > 1:
b[x:x+3] = 1
在此之后, b 具有所需的形式。
我必须为大量数据执行此操作,因此速度是一个问题。NumPy 中是否有更快的方法来执行上述操作?
(我知道这类似于卷积,但不完全相同)。