从集合中随机选择一个/多个函数并应用组合

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从集合中随机选择一个/多个函数并应用组合相关的知识,希望对你有一定的参考价值。

我有n个功能的列表:f1(),f2()..fn()等,需要随机选择n个,然后依次将其中一个/多个应用于对象。用Python的方式可以做到这一点?

用例是从一组图像中生成图像增强(用于训练ML模型),并将(一个/多个)增强功能应用于图像。

答案

[functools.reduce(lambda acc, f: f(acc), random.sample(funs, n), image)怎么样?

另一答案

假设我理解可以使用reduce来完成的问题。

假设:

  1. 您具有功能列表f1,... fN
  2. 您想随机选择一个子列表,说出k个。
  3. 您要按顺序将子列表应用于对象

使用reduce的解决方案>]

from functools import reduce
#from numpy.random import choice   # use if your Python < 3.6
from random import choices         # available in Python 3.6+

# Define function on object (number in this case)
# included print so we can see each function being called
def f1(x):
    print("func1 x + 1: {} -> {}".format(x, x+1))
    return x + 1

def f2(x):
    print("func2 x * 2: {} -> {}".format(x, x*2))
    return x * 2

def f3(x):
    print("func3 x % 2:  {} -> {}".format(x, x%2))
    return x % 2

def f4(x):
    print("func4 x - 5:  {} -> {}".format(x, x-5))
    return x - 5

def f5(x):
    print("func5 x / 2:  {} -> {}".format(x, x/2))
    return x / 2

def f6(x):
    print("func6 x * 3:  {} -> {}".format(x, x/2))
    return x / 2

def f7(x):
    print("func7 x * 5:  {} -> {}".format(x, x/2))
    return x / 2

def f8(x):
    print("func8 x / 10:  {} -> {}".format(x, x/2))
    return x / 2

#将功能应用于对象的功能def apply_func(x,f):返回f(x)

# List of functions
funcs = [f1, f2, f3, f4, f5, f6, f7, f8]

# Test (choose 3 functions at random)
random_funcs = choices(funcs, k = 3)

# Apply the functions to object (value 1)
obj = 1
answer = reduce(apply_func, random_funcs, obj)
print('Answer:', answer)

示例输出

func1 x + 1: 3 -> 4
func7 x * 5:  4 -> 2.0
func4 x - 5:  2.0 -> -3.0
Answer: -3.0

以上是关于从集合中随机选择一个/多个函数并应用组合的主要内容,如果未能解决你的问题,请参考以下文章

从组合框中访问 VBA 随机值

Pyspark:从随机项目函数创建一个集合

为 SKSpriteNode 选择随机图像

机器学习中的数学以及应用

封装解构,集合,字典,内建函数和简单选择排序相关知识及习题

python 怎么从集合中随机数