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))
posted @ 2020-08-21 17:50  会长  阅读(129)  评论(0编辑  收藏  举报