【发布时间】:2012-04-16 01:40:22
【问题描述】:
给定两个长度相等的数组,一个保存数据,一个保存结果但最初设置为零,例如:
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中是否有更快的方法来执行上述操作?
(我知道这类似于卷积,但不完全相同)。
【问题讨论】:
标签: python numpy sum iteration convolution