记录维维的每一篇Hello World

4.jpg

导入numpy工具包

  1. import numpy as np

列表转数组

  1. list1 = [1, 2, 3, 4, 5]
  2. array = np.array(array) # array([1, 2, 3, 4, 5])

向量加,减,乘,除

  1. # 加
  2. a = array + array # array([ 2, 4, 6, 8, 10])
  3. b = array + 2 # array([3, 4, 5, 6, 7])
  4. # 减
  5. c = array - array # array([0, 0, 0, 0, 0])
  6. d = array - 2 # array([-1, 0, 1, 2, 3])
  7. # 乘
  8. e = array * array # array([ 1, 4, 9, 16, 25])
  9. f = array * 2 # array([ 2, 4, 6, 8, 10])
  10. #除
  11. g = array / array # array([1., 1., 1., 1., 1.])
  12. h = array / 2 # array([0.5, 1. , 1.5, 2. , 2.5])
  13. # 还支持取整[//], 取余[%], 次方[**]等操作

基础生成数组方法

  1. a = np.zeros(5, int) # array([0, 0, 0, 0, 0])
  2. b = np.ones(5, int) # array([1, 1, 1, 1, 1])
  3. c = np.empty(5) # array([0.5, 1. , 1.5, 2. , 2.5])
  4. d = np.full(5, 7.) # array([7., 7., 7., 7., 7.])
  5. g = np.arange(1, 7, 2) # array([1, 3, 5])
  6. h = np.linspace(0, 1, 5) # array([0. , 0.25, 0.5 , 0.75, 1. ])

复制一个已经存在的全零向量

  1. a = [[2,2,4,4]]
  2. b = np.zeros_like(a, int) # array([[0, 0, 0, 0]])
  3. c = np.ones_like(a, int) # array([[1, 1, 1, 1]])
  4. d = np.empty_like(a, float) # array([[0., 0., 0., 0.]])
  5. e = np.full_like(a, 7) # array([[7, 7, 7, 7]])

随机生成

  1. # [0, 10) -> int
  2. a = np.random.randint(1, 10, 5) # array([5, 4, 7, 8, 5])
  3. # [0, 1) -> float
  4. b = np.random.rand(5) # array([0.60662688, 0.05057988, 0.67408325, 0.46158708, 0.22527504])
  5. # [1, 10) -> float
  6. c = np.random.uniform(1, 10, 5) # array([5.20380123, 7.30793837, 1.69228062, 6.08904731, 9.72462157])
  7. # -> float 均值0,标准差1
  8. d = np.random.randn(5) # array([-1.27457586, -0.79154283, -0.53697081, -0.26460627, -1.17328879])
  9. # -> float 均值7,标准差2
  10. e = np.random.normal(7, 2, 5) # array([ 5.57415372, 5.24223647, 10.17502981, 5.43507097, 8.01305347])

向量索引

  1. # 和python列表索引一样
  2. a = np.arange(6) # array([0, 1, 2, 3, 4, 5])
  3. b = a[1] # 1
  4. c = a[1:3] # array([1, 2])
  5. d = a[::2] # array([0, 2, 4])
  6. # 不同
  7. e = a[[1, 3, 5]] # array([1, 3, 5])
  8. f = a[a>4] # array([5])
  9. g = a[(a>2) & (a<4)] # array([3]), and[&], or[|], xor[^], not[~]
  10. a[::2] = 0 # a = array([0, 1, 0, 3, 0, 5])

布尔操作

  1. a = np.any(a>4) # True
  2. b = np.all(a>4) # False
  3. c = np.nonzero(a>3) # (array([4, 5], dtype=int64),)
  4. d = np.where(a>3) # (array([4, 5], dtype=int64),)
  5. e = np.where(a>3, 1, 0) # array([0, 0, 0, 0, 1, 1])
  6. np.clip(a, 3, 5) # a = array([3, 3, 3, 3, 4, 5])

基础函数

  1. np.sqrt(array) # 平方根
  2. np.exp(array) # e**array
  3. np.log(array) # ln(a)

标量运算

  1. np.dot(array1, array2) # 向量积的和
  2. np.cross(array1, array2) # 向量各项的积的和

三角函数

  1. np.sin(array) # 正弦值
  2. np.arcsin(array) # 反正弦
  3. np.hypot(array1, array2)

整体取整

  1. np.floor(array) # 向上取整
  2. np.ceil(array) # 向下取整
  3. np.round(array) # 四舍五入

统计操作

  1. # 最大值
  2. np.max(array)
  3. array.max()
  4. # 最小值
  5. np.min(array)
  6. array.min()
  7. # 平均值
  8. np.mean(array, axis=0) # axis=0求各列平均值,axis=1求各行平均值
  9. array.mean()
  10. # 和
  11. np.sum(array)
  12. array.sum()
  13. # 最大值索引
  14. np.argmax(array)
  15. array.argmax()
  16. # 最小值索引
  17. np.argmin(array)
  18. array.argmin()
  19. # 方差
  20. np.var(array)
  21. array.var()
  22. # 标准差
  23. np.std(array)
  24. array.std()

排序操作

  1. np.sort(array)
  2. array.sort()

查找操作

  1. a = 2
  2. # 一般方法
  3. np.where(array==a)[0]
  4. # 需要numba
  5. next(i[0] for i, v in np.ndenumerate(array) if v==a)
  6. # 针对排过序的array
  7. np.searchsorted(array, a)

二维数组/矩阵

  1. # 创建
  2. a = [[1, 2, 3],
  3. [4, 5, 6]]
  4. array = np.array(a)
  5. # array([[1, 2, 3],
  6. # [4, 5, 6]])
  7. # 全是0, 其他方法一样(row, col)
  8. np.zeros((3, 2), int)
  9. # array([[0, 0],
  10. # [0, 0],
  11. # [0, 0]])
  12. # 随机数
  13. np.random.rand(3, 2)
  14. # array([[0.06885682, 0.50443681],
  15. # [0.32235346, 0.00295998],
  16. # [0.17635307, 0.78777035]])
  17. # x==y的值为1,其他为0
  18. np.eye(3)
  19. # array([[1., 0., 0.],
  20. # [0., 1., 0.],
  21. # [0., 0., 1.]])
  22. # (row, col)
  23. array.shape
  24. # 排序/axis默认为0
  25. array.sort(axis=0)
  26. # 其他操作也与一维数组类似

改变形态

  1. array.reshape(row, col)
  2. # row, col为(1, -1)时可转换成类似一维数组

合并/拆分

  1. # 左右合并
  2. np.hstack((array1, array2))
  3. # 上下合并
  4. np.vstack((array1, array2))
  5. # 左右拆分
  6. np.hsplit(array, [3])
  7. # 上下拆分
  8. np.vsplit(array, [3])

复制

  1. # 复制array矩阵3行2列
  2. np.tile(array, (3, 2))
  3. # 复制array两行
  4. array.repeat(2, axis=0)
  5. # 复制array两列
  6. array.repeat(2, axis=1)

操作

  1. # 删除1, 3行
  2. np.delete(array, [1, 3], axis=0)
  3. # 删除1, 3列
  4. np.delete(array, [1, 3], axis=1)
  5. # 删除第二到倒数第二行之间
  6. np.delete(c, np.s_[1: -1], axis=0)
  7. np.delete(c, slice(1, -1), axis=0)
  8. # 删除第二到倒数第二列之间
  9. np.delete(c, np.s_[1: -1], axis=1)
  10. np.delete(c, slice(1, -1), axis=1)

插入

  1. # 在1, 2列插入0
  2. np.insert(array, [1, 2], 0, axis=1)
  3. # 在第一列插入array
  4. np.insert(array1, [1], array2, axis=1)
  5. # 在行尾部添加array
  6. np.append(array1, array2, axis=0)

注意事项

1、阅读https://zhuanlan.zhihu.com/p/396444973后记录

2、axis等于0时为行,等于1时为列,默认为0

3、哎

python环境

电脑:Windows10

python:3.10.4