我在Python中有一个容器(比如list
),其中有N
个元素:x_1, x_2, ... x_N
。
我想将某个函数func()
映射到k
组中的元素,即使用大小为k
的窗口。
我希望窗口不重叠:
x_1, x_2, x_3, x_4
变成:
func(x_1, x_2), func(x_3, x_4)
更具体地说:
l = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
def func(values):
return sum(values)
grouped_map(func, l, 2)
# [1, 5, 9, 13, 17]
最后,我还想使用NumPy数组(使用NumPy感知函数)来实现这一点。你知道吗
对于任何iterable,可以首先定义一个只进行拆分的
grouped()
函数来解决这个问题:然后,可以使用规则的
map()
,例如:对于NumPy阵列,仍然可以使用上面的机器,但是根据要使用的实际功能,可能有更快的替代方法。你知道吗
如果函数是矢量化的或可以接受
np.ndarray
输入,则可以使用:或者,如果函数支持
axis
参数:就时间而言,无论
size
,第一种方法仅对极少数项目具有竞争力。 对于较大的输入,基于NumPy的方法要快得多,如果size
较小,则grouped_map()
最快,而对于较大的size
,则grouped_map_axis()
更快。你知道吗例如,对于
size == 5
:而对于
size == 100
:上面的图形是使用here的代码生成的,使用:
显然,当项目数不是
size
的倍数时,人们可能希望得到一个更健壮的解决方案,例如:时间方面,对于
size = 100
并确保生成不对齐的输入:对于NumPy解决方案,可以探索支持
axis
参数,但这超出了这个问题/答案的范围。你知道吗相关问题 更多 >
编程相关推荐