zoukankan      html  css  js  c++  java
  • np.tile 和np.newaxis

    1. output
    2.  
      array([[ 0.24747071, -0.43886742],
    3.  
      [-0.03916734, -0.70580089],
    4.  
      [ 0.00462337, -0.51431584],
    5.  
      ...,
    6.  
      [ 0.15071507, -0.57029653],
    7.  
      [ 0.06246116, -0.33766761],
    8.  
      [ 0.08218585, -0.59906501]], dtype=float32)
    9.  
       
    10.  
      ipdb> np.shape(output)
    11.  
      (64, 2)
    12.  
       
    13.  
      ipdb> np.max(output, axis=1)[:,np.newaxis]
    14.  
      array([[ 0.24747071],
    15.  
      [-0.03916734],
    16.  
      [ 0.00462337],
    17.  
      ...,
    18.  
      [ 0.15071507],
    19.  
      [ 0.06246116],
    20.  
      [ 0.08218585]], dtype=float32)
    21.  
       
    22.  
      ipdb> np.tile(np.max(output, axis=1)[:,np.newaxis], [1,2]))
    23.  
      *** SyntaxError: invalid syntax (<stdin>, line 1)
    24.  
       
    25.  
      ipdb> np.tile(np.max(output, axis=1)[:,np.newaxis], [1,2])
    26.  
      array([[ 0.24747071, 0.24747071],
    27.  
      [-0.03916734, -0.03916734],
    28.  
      [ 0.00462337, 0.00462337],
    29.  
      ...,
    30.  
      [ 0.15071507, 0.15071507],
    31.  
      [ 0.06246116, 0.06246116],
    32.  
      [ 0.08218585, 0.08218585]], dtype=float32)
    33.  
       
    34.  
      ipdb> output
    35.  
      array([[ 0.24747071, -0.43886742],
    36.  
      [-0.03916734, -0.70580089],
    37.  
      [ 0.00462337, -0.51431584],
    38.  
      ...,
    39.  
      [ 0.15071507, -0.57029653],
    40.  
      [ 0.06246116, -0.33766761],
    41.  
      [ 0.08218585, -0.59906501]], dtype=float32)
    42.  
       
    43.  
      ipdb> np.max(output, axis=1)
    44.  
      array([ 0.24747071, -0.03916734, 0.00462337, ..., 0.15071507,
    45.  
      0.06246116, 0.08218585], dtype=float32)
    46.  
      ipdb> np.exp(output - np.tile(np.max(output, axis=1)[:,np.newaxis], [1,2]))
    47.  
      array([[ 1.        ,  0.50341612],
    48.  
             [ 1.        ,  0.51343411],
    49.  
             [ 1.        ,  0.59515154],
    50.  
             ...,
    51.  
             [ 1.        ,  0.48626012],
    52.  
             [ 1.        ,  0.67023373],
    53.  
             [ 1.        ,  0.50598365]], dtype=float32)

    1- np.newaxis

     

    np.newaxis的功能是插入新维度,看下面的例子:

    a=np.array([1,2,3,4,5])
    print a.shape

    print a

    输出结果

    (5,)
    [1 2 3 4 5]

    可以看出a是一个一维数组,

    x_data=np.linspace(-1,1,300)[:,np.newaxis]
    a=np.array([1,2,3,4,5])
    b=a[np.newaxis,:]
    print a.shape,b.shape
    print a

    print b

    输出结果:

    (5,) (1, 5)
    [1 2 3 4 5]
    [[1 2 3 4 5]]

     

    x_data=np.linspace(-1,1,300)[:,np.newaxis]
    a=np.array([1,2,3,4,5])
    b=a[:,np.newaxis]
    print a.shape,b.shape
    print a
    print b

    输出结果

    (5,) (5, 1)
    [1 2 3 4 5]
    [[1]
     [2]
     [3]
     [4]
     [5]]

    可以看出np.newaxis分别是在行或列上增加维度,原来是(6,)的数组,在行上增加维度变成(1,6)的二维数组,在列上增加维度变为(6,1)的二维数组

    2. np.tile

    函数原型:numpy.tile(A,reps) #简单理解是此函数将A进行重复输出

     其中A和reps都是array_like的参数,A可以是:array,list,tuple,dict,matrix以及基本数据类型int,string,float以及bool类型,reps的类型可以是tuple,list,dict,array,int,bool,但不可以是float,string,matrix类型。

    计较常用的形式有两种,是将A简单进行一维重复输出,和将A进行二维重复后输出。
    一维重复:

    1.  
      import numpy as np
    2.  
      a = [[1,2,3],[4,5,5]]
    3.  
      b = np.tile(a,3)
    4.  
      print(b)
    5.  
       
    6.  
      #输出为
    7.  
      #[[1 2 3 1 2 3 1 2 3]
    8.  
      # [4 5 5 4 5 5 4 5 5]]

    二维重复:#上面的一维重复相当于 b = np.tile(a,[1,3])

    1.  
      import numpy as np
    2.  
      a = [[1,2,3],[4,5,5]]
    3.  
      b = np.tile(a,[2,3])
    4.  
      print(b)
    5.  
       
    6.  
      #输出为:
    7.  
      #[[1 2 3 1 2 3 1 2 3]
    8.  
      # [4 5 5 4 5 5 4 5 5]
    9.  
      # [1 2 3 1 2 3 1 2 3]
    10.  
      # [4 5 5 4 5 5 4 5 5]]

    2.1 np.tile

    numpy.tile()是个什么函数呢,说白了,就是把数组沿各个方向复制

    比如 a = np.array([0,1,2]),    np.tile(a,(2,1))就是把a先沿x轴(就这样称呼吧)复制1倍,即没有复制,仍然是 [0,1,2]。 再把结果沿y方向复制2倍,即最终得到

     array([[0,1,2],

                 [0,1,2]])

    同理:

    >>> b = np.array([[1, 2], [3, 4]])
    >>> np.tile(b, 2) #沿X轴复制2倍
    array([[1, 2, 1, 2],
           [3, 4, 3, 4]])
    >>> np.tile(b, (2, 1))#沿X轴复制1倍(相当于没有复制),再沿Y轴复制2倍
    array([[1, 2],
           [3, 4],
           [1, 2],
           [3, 4]])

    numpy.tile()具体细节,如下:

    numpy.tile(A, reps)

    Construct an array by repeating A the number of times given by reps.

    If reps has length d, the result will have dimension of max(d, A.ndim).

    If A.ndim dA is promoted to be d-dimensional by prepending new axes. So a shape (3,) array is promoted to (1, 3) for 2-D replication, or shape (1, 1, 3) for 3-D replication. If this is not the desired behavior, promote A to d-dimensions manually before calling this function.

    If A.ndim dreps is promoted to A.ndim by pre-pending 1’s to it. Thus for an A of shape (2, 3, 4, 5), a repsof (2, 2) is treated as  (1, 1, 2, 2).

    Note : Although tile may be used for broadcasting, it is strongly recommended to use numpy’s broadcasting operations and functions.

    Parameters:

    A : array_like

    The input array.

    reps : array_like

    The number of repetitions of A along each axis.

    Returns:

    c : ndarray

    The tiled output array.

    See also

    repeat
    Repeat elements of an array.
    broadcast_to
    Broadcast an array to a new shape

    Examples

    >>>
    >>> a = np.array([0, 1, 2])
    >>> np.tile(a, 2)
    array([0, 1, 2, 0, 1, 2])
    >>> np.tile(a, (2, 2))
    array([[0, 1, 2, 0, 1, 2],
           [0, 1, 2, 0, 1, 2]])
    >>> np.tile(a, (2, 1, 2))
    array([[[0, 1, 2, 0, 1, 2]],
           [[0, 1, 2, 0, 1, 2]]])
    
    >>>
    >>> b = np.array([[1, 2], [3, 4]])
    >>> np.tile(b, 2)
    array([[1, 2, 1, 2],
           [3, 4, 3, 4]])
    >>> np.tile(b, (2, 1))
    array([[1, 2],
           [3, 4],
           [1, 2],
           [3, 4]])
    
    >>>
    >>> c = np.array([1,2,3,4])
    >>> np.tile(c,(4,1))
    array([[1, 2, 3, 4],
           [1, 2, 3, 4],
           [1, 2, 3, 4],
           [1, 2, 3, 4]])

     原文:https://blog.csdn.net/wuguangbin1230/article/details/77678785

  • 相关阅读:
    Android之SurfaceView学习(一)转转
    【.NET Core项目实战-统一认证平台】第八章 授权篇-IdentityServer4源码分析
    【.NET Core项目实战-统一认证平台】第七章 网关篇-自定义客户端限流
    【.NET Core项目实战-统一认证平台】第六章 网关篇-自定义客户端授权
    【.NET Core项目实战-统一认证平台】第五章 网关篇-自定义缓存Redis
    【.NET Core项目实战-统一认证平台】第四章 网关篇-数据库存储配置(2)
    【.NET Core项目实战-统一认证平台】第三章 网关篇-数据库存储配置(1)
    SmartSql 快速使用指南
    SmartSql 性能评测
    【.NET Core项目实战-统一认证平台】第二章网关篇-定制Ocelot来满足需求
  • 原文地址:https://www.cnblogs.com/Ph-one/p/9234967.html
Copyright © 2011-2022 走看看