numpy中的fromfunction()的调用栈很奇葩!?!?


书上看到了一段代码,讲numpy的fromfunction的使用


 import numpy as np
def func(i):
    print 'call!'
    return i%4

np.fromfunction(func, (10,))
#结果是 array([1., 2., 3., 4., 1., 2., 3., 4., 1., 2.])

但是很奇葩的是,func这个函数只是传递单个int类型,返回一个值。为什么用了fromfunction会返回这么一个数组?

猜测一下应该是numpu调用了10次的func,然后每次把不同的参数传递进去,最后把结果拼成一个数组。

但是最奇葩的是,函数中的print 'call!'只执行过一次。。。也就是说不是同一个函数调用了10次??那这个fromfunction的调用形式到底是啥。。。

python numpy

OLazy 11 years, 4 months ago

因为Python中没有指明类型。


 def func(i):
    print 'call!'
    return i%4

但是很奇葩的是,func这个函数只是传递单个int类型,返回一个值。为什么用了fromfunction会返回这么一个数组?

你看到 i 知道代表整型,但是Python不知道。 i 一样可以是数组:


 from numpy import * 
array([1, 2, 3, 4]) % 4 # 返回 array([1, 2, 3, 0])

猜测一下应该是numpu调用了10次的func,然后每次把不同的参数传递进去,最后把结果拼成一个数组。

但是最奇葩的是,函数中的print 'call!'只执行过一次。。。也就是说不是同一个函数调用了10次??

只调用一次,看源代码最清楚:


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

华丽谢幕. answered 11 years, 4 months ago

Your Answer