zoukankan      html  css  js  c++  java
  • 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(functionshape**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

    The function is called with N parameters, where N is the rank of shape. Each parameter represents the coordinates of the array varying along a specific axis. For example, if shape were (2, 2), then the parameters in turn be (0, 0), (0, 1), (1, 0), (1, 1).

    shape : (N,) tuple of ints

    Shape of the output array, which also determines the shape of the coordinate arrays passed to function.

    dtype : data-type, optional

    Data-type of the coordinate arrays passed to function. By default, dtype is float.

    Returns:

    fromfunction : any

    The result of the call to function is passed back directly. Therefore the shape of fromfunction is completely determined by function. If function returns a scalar value, the shape of fromfunction would match the shape parameter.

        主要是第二个参数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 函数来计算得出。

  • 相关阅读:
    C puzzles详解【51-57题】
    C puzzles详解【46-50题】
    C puzzles详解【38-45题】
    C puzzles详解【34-37题】
    C puzzles详解【31-33题】
    C puzzles详解【26-30题】
    C puzzles详解【21-25题】
    C puzzles详解【16-20题】
    使用C++模板实现栈的求最小值功能
    模拟求幂运算,考虑的已经很周全了
  • 原文地址:https://www.cnblogs.com/pingwen/p/4803501.html
Copyright © 2011-2022 走看看