使用numpy fromfunction

时间:2016-11-18 08:25:05

标签: python numpy lambda

我试图使用fromfunction创建一个高斯值为mu = 3和sig = 2的5x5矩阵,这是我的尝试:

from random import gauss
import numpy as np
np.fromfunction(lambda i,j: gauss(3,2), (5, 5))

结果如下:5.365244570434782

据我所知docs这应该有效,但我得到的是标量而不是5x5矩阵...为什么?以及如何解决这个问题?

2 个答案:

答案 0 :(得分:11)

numpy.fromfunction文档极具误导性。 fromfunction实际上只调用您传递给它的函数,而不是重复调用函数并从结果中构建数组。在那一次调用中,它将许多索引数组传递给您的函数,而不是单个索引。

剥离文档字符串,实现如下:

def fromfunction(function, shape, **kwargs):
    dtype = kwargs.pop('dtype', float)
    args = indices(shape, dtype=dtype)
    return function(*args,**kwargs)

这意味着除非你的功能广播,numpy.fromfunction没有像文档所说的那样做任何事情。

答案 1 :(得分:2)

我知道这是一篇过时的文章,但是对于任何对此绊脚石的人来说,它不起作用的原因是,lambda中的表达式没有使用i, j变量

您需要达到以下目标:

np.zeros((5, 5)) + gauss(3, 2)