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的调用形式到底是啥。。。
OLazy
11 years, 4 months ago
Answers
因为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