Numpy.fromfunction用法

来源:互联网 发布:在淘宝卖东西赚钱吗 编辑:程序博客网 时间:2024/06/16 02:22

numpy.fromfunction(function, shape, **kwargs):Construct an array by executing a function over each coordinate.

参数说明:function:回调函数

                shape:整数元组,若是一维数组,则shape为(数组长度,)

下面通过几个例子看看numpy.fromfunction构造数组的机制

In [1]: import numpy as npIn [2]: np.fromfunction(lambda i :i ,(4,))Out[2]: array([ 0.,  1.,  2.,  3.])In [3]: np.fromfunction(lambda i,j:i+j,(2,3))Out[3]:array([[ 0.,  1.,  2.],       [ 1.,  2.,  3.]])
看到上述结果是不是觉得有点奇怪,也不清楚怎么来的。那下面我们来看看传给回调函数的i,j的值到底是啥?给函数多传个参数行不行呢?
In [6]: def f(*args):   ...:     print(args)   ...: np.fromfunction(f,(2,3))   ...:(array([[ 0.,  0.,  0.],       [ 1.,  1.,  1.]]), array([[ 0.,  1.,  2.],       [ 0.,  1.,  2.]]))
结果上看:传给回调函数确实是只有两个参数,是两个数组,这和shape参数到底有啥关系呢?
#fromfunction源码def fromfunction(function, shape, **kwargs):    dtype = kwargs.pop('dtype', float)    args = indices(shape, dtype=dtype)    return function(*args,**kwargs)#从源代码看,indices如何把shape参数转为对应的i,j参数,下面看看indices用法#numpy.indices(dimensions, dtype=<type 'int'>):子数组包含仅沿对应轴变化的索引值args = np.indices((2,3))#等同np.mgrid[0:2,0:3]#args#array([[[0, 0, 0],[1, 1, 1]],[[0, 1, 2],[0, 1, 2]]])i,j=argsi #array([[0, 0, 0],[1, 1, 1]])j #array([[0, 1, 2],[0, 1, 2]])i+j#array([[0, 1, 2],[1, 2, 3]])两数组对应元素级相加#结论:shape参数决定了输出数组的形状





0 0
原创粉丝点击