zoukankan      html  css  js  c++  java
  • NumPy基础


    最近我又决定看数学了,啊,先看下numpy,我好用来画函数图像。

    数组

    同质数组ndarray是Numpy中最重要的数据类型,该数据类型由两部分组成:

    1. 数据
    2. 描述数据的元数据

    生成一维数组

    import numpy as np
    
    if __name__ == "__main__":
        a0 = np.array(range(11))    # 生成[0 1 2 3 4 5 6 7 8 9 10]
        a1 = np.arange(11)          # 生成[0 1 2 3 4 5 6 7 8 9 10]
        a2 = np.arange(0, 11)       # 生成[0 1 2 3 4 5 6 7 8 9 10]
        a3 = np.arange(0, 11, 2)    # 生成[0 2 4 6 8 10]
    

    生成多维数组

    import numpy as np
    
    if __name__ == "__main__":
        a = np.array([np.arange(2), np.arange(2)])
        print(a)
        print('--------------')
        print("shape:", a.shape) # shape是由外到内的维度数组成的元组
        print("dtype:", a.dtype) # 元数据
    

    image.png-1.1kB

    选取数组的元素

    import numpy as np
    
    if __name__ == "__main__":
        a = np.array([np.arange(2), np.arange(2,4), np.arange(4,6)])
        print(a)
        print('-----------------------')
        print('a[0][0]:', a[0][0])
        print('a[1][0]:', a[1][0])
        print('a[2][0]:', a[2][0])
    

    image.png-1.4kB

    数组切片

    先看一维数组的切片:

    import numpy as np
    
    if __name__ == "__main__":
        
        a = np.arange(10)
    
        print(a)
        print('-----------')
        print(a[0:5])       # [0 1 2 3 4]
        print(a[:5])        # [0 1 2 3 4]
        print(a[:5:2])      # [0 2 4]
        print(a[-3: -1])    # [7 8]
        print(a[-3:])       # [7 8 9]
        print(a[:])         # [0 1 2 3 4 5 6 7 8 9]
        print(a[::-1])      # [9 8 7 6 5 4 3 2 1 0]
    

    list上的切片是一样的。再看多维数组的切片:

    import numpy as np
    
    if __name__ == "__main__":
        
        a = np.arange(24).reshape(2,3,4) # 这样也可以方便地构建一个多维数组
        print(a)
        print('-------------')
    
        print('a[0]:')
        print(a[0])
        print('-----')
    
        print('a[0,0]:')
        print(a[0,0]) 
        print('-----')
    
        print('a[0,0,0]:')
        print(a[0,0,0]) 
        print('-----')
    
        print('a[:,:,0]:')
        print(a[:,:,0]) 
        print('-----')
    
        print('a[...,0]:') # 上面的省略写法
        print(a[...,0]) 
        print('-----')
    
        print('a[:,0:2,0]:')
        print(a[:,0:2,0]) 
        print('-----')
    

    image.png-7.4kB
    总得来说,每个维度的切片和一维切片是一样的,不同维度直接用逗号分割。

    改变数组的维度

    • reshape 返回改变维度后的数组
    • resize 改变原数组的维度
    • ravel 返回原数组展平后的数组
    • flatten 返回原数组展平后的数组

    这两个的使用场景区别我暂时没搞懂

    组合数组

    import numpy as np
    
    if __name__ == "__main__":    
        a = np.arange(9).reshape(3,3)
        b = np.arange(9).reshape(3,3)
    
        c = np.hstack((a, b)) # 横向合并
        d = np.vstack((a, b)) # 纵向合并
        print(c)
        print(d)
    

    image.png-2.1kB

    分割数组

    import numpy as np
    
    if __name__ == "__main__":    
        a = np.arange(9).reshape(3,3)
        print(a)
        print('---------')
        a1 = np.split(a, 3, 0)  # 按第一个维度分割
        a2 = np.split(a, 3, 1)  # 按第二个维度分割
        print(a1)
        print(a2)
    

    image.png-4.2kB

    数据类型

    常用的数据类型有

    • bool
    • int8
    • int16
    • int32(int)
    • int64
    • uint8
    • uint16
    • uint32
    • uint64
    • float16
    • float32
    • float64(float)

    此外还有复数和随平台改变精度的整形,不常用,用时再查。

    创建数组时可以指定数据类型:

    import numpy as np
    
    if __name__ == "__main__":
        
        a1 = np.array([1, 2, 3], dtype=np.int)
        a2 = np.array([1, 2, 3], dtype=np.int16)
    
        a3 = np.array([1, 2.5, 3.5], dtype=np.float)
        a4 = np.array([1, 2.5, 3.5], dtype=np.float16)
    
        print('int:', a1.dtype)
        print('int16:', a2.dtype)
    
        print('float:', a3.dtype)
        print('float16:', a4.dtype)
    

    image.png-1kB

    数据类型强制转换

    每种数据类型都对应一个强制转换函数,函数名通数据类型名:

    import numpy as np
    
    if __name__ == "__main__":
        
        print(np.int(1))
        print(np.float(1))
        print(np.bool(1))
    
  • 相关阅读:
    git config 命令各参数有何区别
    Git 初始化
    Linux 安装 Git
    在Mac OS 上安装 Git
    maven 部署到远程仓库(私服)
    Git与SVN的区别
    windows挂载NFS文件系统无法访问/修改文件解决
    mysql5.7写入数据时间相差13/14小时解决
    mysql配置文件不生效解决
    springdata jpa mysql5.7写入中文乱码解决
  • 原文地址:https://www.cnblogs.com/zzy0471/p/13542313.html
Copyright © 2011-2022 走看看