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的调用形式到底是啥。。。

阅读 6.1k
1 个回答

因为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)
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题