首页 > 解决方案 > Python Numpy 外部产品将函数列表应用于没有 For 循环的参数列表

问题描述

我有一个数字数组和一个函数列表。

我想对每个数字运行每个函数以获取矩阵。

有没有办法在没有慢速 python 循环/映射的情况下做到这一点?

import numpy
    arr = numpy.array([1,2,3,4,5])
    fns = [numpy.sin, numpy.cos, numpy.exp]
    results = numpy.zeros(shape=( len(fns), len(arr) ))
    for i, fn in enumerate(fns):
        for j, val in enumerate(arr):
            results[i][j] = fn(val)
    print ('results', results)

我可以通过函数广播摆脱一个循环:

results2 = numpy.zeros(shape=( len(fns), len(arr) ))
    for i, fn in enumerate(fns):
        results2[i] = fn(arr)
    print ('results2', results2)

有没有一些聪明的 pythonic numpy-ish 方法来摆脱我的第二个循环?

也许有些内置的外部产品交互很难用谷歌搜索?

results3 = numpy.function_outer( fns, arr)

标签: pythonnumpyvectorization

解决方案


您可以使用列表推导并将其转换回 numpy 数组,如下所示:

results3 = numpy.array([ fn(arr) for fn in fns])

推荐阅读