zoukankan      html  css  js  c++  java
  • Numpy系列(三)- 基本运算操作

    Numpy 中数组上的算术运算符使用元素级别。最后的结果使用新的一个数组来返回。

    import numpy as np
    a = np.array( [20,30,40,50] )
    b = np.arange(4)
    b
    Out[113]: array([0, 1, 2, 3])
    c = a -b
    c 
    Out[114]: array([20, 29, 38, 47])
    b ** 2
    Out[115]: array([0, 1, 4, 9], dtype=int32)
    a < 34
    Out[116]: array([ True,  True, False, False])
    

     需要注意的是,乘法运算符*的运算在NumPy数组中也是元素级别的(这与许多矩阵语言不同)。如果想要执行矩阵乘积,可以使用dot函数:

    A = np.array( [[1,1], [0,1]] )
    B = np.array( [[2,0], [3,4]] )
    A
    Out[117]: 
    array([[1, 1],
           [0, 1]])
    B
    Out[118]: 
    array([[2, 0],
           [3, 4]])
    A * B
    Out[119]: 
    array([[2, 0],
           [0, 4]])
    A.dot(B)
    Out[120]: 
    array([[5, 4],
           [3, 4]])
    np.dot(A,B)
    Out[121]: 
    array([[5, 4],
           [3, 4]])
    

      某些操作(如+=*=)可以修改现有数组,而不是创建新数组。

    a = np.ones((2,3), dtype=np.int32)
    a *= 3
    a
    Out[122]: 
    array([[3, 3, 3],
           [3, 3, 3]])
    b = np.random.random((2,3))
    b
    Out[124]: 
    array([[0.39895014, 0.30638211, 0.9011525 ],
           [0.6135912 , 0.02488626, 0.67726569]])
    a.dtype
    Out[125]: dtype('int32')
    b.dtype
    Out[126]: dtype('float64')
    b += a
    b
    Out[128]: 
    array([[3.39895014, 3.30638211, 3.9011525 ],
           [3.6135912 , 3.02488626, 3.67726569]])
    a += b
    Traceback (most recent call last):
      File "D:pytho3.6libsite-packagesIPythoncoreinteractiveshell.py", line 2963, in run_code
        exec(code_obj, self.user_global_ns, self.user_ns)
      File "<ipython-input-129-294cacd62d6f>", line 1, in <module>
        a += b
    TypeError: Cannot cast ufunc add output from dtype('float64') to dtype('int32') with casting rule 'same_kind' 

    当使用不同类型的数组操作时,结果数组的类型对应于更一般或更精确的数组(称为向上转换的行为)。

    由于定义 a时,数据类型指定为np.int32,而 a+b 生成的数据类型为 np.float64,所以自动转换出错。

    around

    np.around 返回四舍五入后的值,可指定精度。

    around(a, decimals=0, out=None)

    输入数组

    decimals 要舍入的小数位数。 默认值为0。 如果为负,整数将四舍五入到小数点左侧的位置

    import numpy as np
    
    n = np.array([-0.746, 4.6, 9.4, 7.447, 10.455, 11.555])
    
    around1 = np.around(n)
    print(around1) # [ -1. 5. 9. 7. 10. 12.]
    
    around2 = np.around(n, decimals=1)
    print(around2) # [ -0.7 4.6 9.4 7.4 10.5 11.6]
    
    around3 = np.around(n, decimals=-1)
    print(around3) # [ -0. 0. 10. 10. 10. 10.]

    floor

    np.floor 返回不大于输入参数的最大整数。 即对于输入值 x ,将返回最大的整数 i ,使得 i <= x。 注意在Python中,向下取整总是从 0 舍入。

    import numpy as np
    n = np.array([-1.7, -2.5, -0.2, 0.6, 1.2, 2.7, 11])
    floor = np.floor(n)
    print(floor) # [ -2. -3. -1. 0. 1. 2. 11.]
    [-2. -3. -1.  0.  1.  2. 11.]

    ceil

    np.ceil 函数返回输入值的上限,即对于输入 x ,返回最小的整数 i ,使得 i> = x。

    import numpy as np
    
    n = np.array([-1.7, -2.5, -0.2, 0.6, 1.2, 2.7, 11])
    
    ceil = np.ceil(n)
    print(ceil) # [ -1. -2. -0. 1. 2. 3. 11.]

    np.where

    numpy.where(condition[, x, y])

    根据 condition 从 x 和 y 中选择元素,当为 True 时,选 x,否则选 y。

    https://docs.scipy.org/doc/numpy/reference/generated/numpy.where.html

    import numpy as np
    data = np.random.random([2, 3])
    print(data)
    [[0.37618029 0.09114803 0.12294256]
     [0.59006572 0.18597964 0.46023678]]
    result = np.where(data > 0.5, data, 0)
    print(result)
    [[0.         0.         0.        ]
     [0.59006572 0.         0.        ]]
    
  • 相关阅读:
    mfc判断当前程序是否正在运行
    mfc通过信号量保证线程同步
    delete和析构函数
    获取当前运行的exe路径
    mfc移动文件夹
    Cmake实现样例
    安装Node.js以及Hexo
    分类与回归的关系和区别
    從文本到視覺:各領域最前沿的論文集合
    ubuntu 终端$换行
  • 原文地址:https://www.cnblogs.com/zhangyafei/p/10567014.html
Copyright © 2011-2022 走看看