标签:
从函数规则创建数组是非常方便的方法。在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 函数来计算得出。
标签:
原文地址:http://www.cnblogs.com/pingwen/p/4803501.html