numpy函数fromfunction分析
从函数规则创建数组是非常方便的方法。在numpy中我们常用fromfunction函数来实现这个功能。
在numpy的官网有这么一个例子。
1 >>> def f(x,y): 2 ... return 10*x+y 3 ... 4 >>> b = fromfunction(f,(5,4),dtype=int) 5 >>> b 6 array([[ 0, 1, 2, 3], 7 [10, 11, 12, 13], 8 [20, 21, 22, 23], 9 [30, 31, 32, 33], 10 [40, 41, 42, 43]])
查找help()解释如下:
numpy.fromfunction(function, shape, **kwargs)[source]
Construct an array by executing a function over each coordinate.
The resulting array therefore has a value fn(x, y, z) at coordinate (x, y, z).
Parameters: |
function : callable
shape : (N,) tuple of ints
dtype : data-type, optional
|
---|---|
Returns: |
fromfunction : any
|
主要是第二个参数shape,(N,)定义了fromfunction的输出数据形式。
说起来比较绕口,下面用几个例子说明。
1 # -*- coding: utf-8 -*- 2 from numpy import * 3 4 def f1(x,y): 5 return x 6 7 def f2(x,y): 8 return y 9 10 def f3(x,y): 11 return 2*x+y
运行测试:
>>> b=fromfunction(f1, (5,5), dtype = int)
>>> b
array([[0, 0, 0, 0, 0],
[1, 1, 1, 1, 1],
[2, 2, 2, 2, 2],
[3, 3, 3, 3, 3],
[4, 4, 4, 4, 4]])
>>> b=fromfunction(f1, (5,4), dtype = int)
>>> b
array([[0, 0, 0, 0],
[1, 1, 1, 1],
[2, 2, 2, 2],
[3, 3, 3, 3],
[4, 4, 4, 4]])
>>> b=fromfunction(f2, (5,5), dtype = int)
>>> b
array([[0, 1, 2, 3, 4],
[0, 1, 2, 3, 4],
[0, 1, 2, 3, 4],
[0, 1, 2, 3, 4],
[0, 1, 2, 3, 4]])
>>> b=fromfunction(f3, (5,5), dtype = int)
>>> b
array([[ 0, 1, 2, 3, 4],
[ 2, 3, 4, 5, 6],
[ 4, 5, 6, 7, 8],
[ 6, 7, 8, 9, 10],
[ 8, 9, 10, 11, 12]])
>>>
从上面的测试可以看出,shape()定义了输出矩阵的大小。如shape(5,4),则x参数是5行1列行列式[0,1,2,3,4]. y参数1行4列行列式[0,1,2,3].
将x,y带人func函数计算,最后结果的每个元素是根据func 函数来计算得出。