2016-11-18 43 views
4

即時試圖使用fromfunction創建具有畝= 3和sig的高斯值的5x5矩陣= 2,這是我的嘗試:使用numpy的fromfunction的

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

這是結果:5.365244570434782

據我所知,從docs這應該工作,但我得到一個標量而不是5x5矩陣...爲什麼?以及如何解決這個問題?

回答

9

numpy.fromfunction文檔極具誤導性。而不是重複調用你的函數,並從結果中建立一個數組,fromfunction實際上只會對你傳遞的函數進行一次調用。在這一次調用中,它將一些索引數組傳遞給你的函數,而不是單獨的索引。

剔除文檔字符串,執行如下:

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

這意味着,除非你的函數廣播,numpy.fromfunction不會做像什麼文件說它做任何事情。

+0

那麼你如何使用函數在我的用例? –

+0

@OfekRon我不知道。然而,我相信'numpy'有一個'random'模塊,它應該已經提供了創建數組和高斯分佈等元素的能力...... – Bakuriu

+0

@Bakuriu你能更具體嗎? –