Numpy,沿数组维度应用函数列表
Posted
技术标签:
【中文标题】Numpy,沿数组维度应用函数列表【英文标题】:Numpy, apply a list of functions along array dimension 【发布时间】:2017-11-20 16:58:23 【问题描述】:我有一个类型的函数列表:
func_list = [lambda x: function1(input),
lambda x: function2(input),
lambda x: function3(input),
lambda x: x]
和一个形状为 [4, 200, 200, 1] 的数组(一批图像)。
我想沿第 0 轴按顺序应用函数列表。
编辑:重新表述问题。这相当于上面的。说,而不是数组,我有一个由 4 个相同数组组成的元组,形状为 (200, 200, 1),我想在第一个元素上应用 function1,在第二个元素上应用 function2,等等。这可以做到吗?一个for循环?
【问题讨论】:
只是为了理解,您想将其应用于特定行吗?轴?还是在整个矩阵上?这些函数是否会转换每个元素,或者它们是否类似于 sum/max 函数,提供单个输出? 【参考方案1】:您可以使用np.apply_along_axis
迭代您的函数列表:
import numpy as np
x = np.ranom.randn(100, 100)
for f in fun_list:
x = np.apply_along_axis(f, 0, x)
基于 OP 的更新
假设你的函数和批次大小相同:
batch = ... # tuple of 4 images
batch_out = tuple([np.apply_along_axis(f, 0, x) for f, x in zip(fun_list, batch)])
【讨论】:
是否可以避免for循环? @Quubix 如果有办法,这将是一个很好的功能。但我不确定是否有。【参考方案2】:我尝试了@Coldspeed 的答案,它确实有效(所以我会接受它)但这是我找到的替代方案,不使用 for 循环:
result = tuple(map(lambda x,y:x(y), functions, image_tuple))
编辑:忘记添加元组(),谢谢@Coldspeed
【讨论】:
如果使用 python 3,请不要忘记添加tuple()
到最终答案。
[x(y) for x, y in zip(functions, image_tuple)]
是理解等价物。以上是关于Numpy,沿数组维度应用函数列表的主要内容,如果未能解决你的问题,请参考以下文章