NumPy简介:

NumPy 是高性能科学计算和数据分析的基础包;它是pandas等其他工具的基础。

NumPy的主要功能:

  1. 1. ndarray,一个多维数组结构,高效且节省空间 (最主要的功能)
  2. 2. 无需循环对整组数据进行快速运算的数学函数
  3. 3. 线性代数、随机数生成和傅里叶变换功能

安装方法:

  1. pip install numpy

引用方式:

  1. import numpy as np

ndarray --- 多维数组对象

  1. import numpy as np
  2. 创建 ndarray np.array(array_like)

数组与列表的区别:

  1. 1. 数组对象内的元素类型必须相同
  2. 2. 数据大小不可修改

ndarray 的数据类型:

  1. 1. 布尔型:bool_
  2. 2. 整型:int_ int8 int16 int32 int64
  3. 3. 无符号整型:uint8 uint16 uint32 uint64
  4. 4. 浮点型:float_ float16 float32 float64
  5. 5. 复数型:complex_ complex64 complex128

array 基础:

示例代码1:(运行在 jupyter notebook 上)

  1. import numpy as np
  2. import random
  3.  
  4. # 示例1:已知若干跨国公司的市值(美元),将其换算成人民币
  5. company_value = [random.uniform(100.0,200.0) for i in range(50)] # random.uniform(浮点数1,浮点数2) : 随机生成浮点数
  6.  
  7. exchange_rate = 6.8
  8.  
  9. company_value = np.array(company_value)
  10.  
  11. company_value * exchange_rate # company_value 这个列表中的每一个元素会都和 exchange_rate 相乘
  12.  
  13. """
  14. # 输出结果:
  15.  
  16. array([ 845.86596363, 830.59247689, 925.73635851, 994.17431358,
  17. 1202.07839264, 1108.3175636 , 1135.15916313, 1171.85643304,
  18. 743.06118207, 1213.00933088, 882.02326337, 1004.72845351,
  19. 874.40129737, 722.8946267 , 1308.49169262, 1096.72738352,
  20. 1231.12116846, 1255.03236732, 1077.22583737, 1323.68310872,
  21. 765.1724099 , 1188.17611809, 940.02458512, 1141.96064667,
  22. 1323.77261344, 1301.97767208, 969.35890194, 1291.7188247 ,
  23. 1082.17748458, 961.91630791, 1158.81519619, 918.03641864,
  24. 970.21533038, 1174.21974931, 1154.29890466, 1050.87454 ,
  25. 1269.64470711, 850.13327118, 1021.26461162, 712.55711713,
  26. 1156.62432585, 684.48019691, 996.70613004, 750.45285854,
  27. 1243.63861422, 1304.56338027, 1156.27695066, 1235.00442836,
  28. 1083.40377629, 783.09838542])
  29. """

示例代码2:(运行在 jupyter notebook 上)

  1. # 示例2:已知购物车中每件端口的价格与商品件数,求总金额
  2. import numpy as np
  3. import random
  4.  
  5. unit_price = [random.uniform(10.0,20.0) for i in range(50)]
  6. amount = [random.randint(1,10) for i in range(50)]
  7.  
  8. unit_price = np.array(unit_price)
  9. amount = np.array(amount)
  10.  
  11. unit_price * amount # unit_price 这个列表中的每一个元素都会和 amount 这个列表中的每一个元素相乘
  12.  
  13. (unit_price * amount).sum() # .sum() 是 np.array 的求和

示例代码3:数组的属性(运行在 jupyter notebook 上)

  1. # 数组的属性
  2. import numpy as np
  3. np.array([1,2,3,4,5])
  4. # 输出结果:array([1, 2, 3, 4, 5])
  5.  
  6. np.array(range(10))
  7. # 输出结果: array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
  8.  
  9. a = np.array(range(10))
  10. a.dtype # 查看类型
  11. # 输出结果: dtype('int32')
  12.  
  13. a.size # 当前数组存了多少个数
  14. # 输出结果: 10
  15.  
  16. np.array([[1,2,3,],[4,5,6,]]) # [[1,2,3,],[4,5,6,]] 是一个二维列表;np.array([[1,2,3,],[4,5,6,]]) 是一个二维数组
  17. # 输出结果: array([[1, 2, 3],
  18. # [4, 5, 6]])
  19.  
  20. b= np.array([[1,2,3],[4,5,6]])
  21. b.dtype
  22. # 输出结果: dtype('int32')
  23. b.size # 返回总的元素个数
  24. # 输出结果: 6
  25. b.shape # 返回的是 几乘几 (元组的形式),这是对于二维数组;对于一维数组而言,返回的是: (数组的长度,)
  26. # 输出结果:(2, 3) # 意思是 2行3列
  27. b.T # 数组的转置 (如:行变成列,列变成行)
  28. """
  29. 输出结果:
  30. array([[1, 4],
  31. [2, 5],
  32. [3, 6]])
  33. """
  34. b.ndim # 查看当前维度
  35. # 输出结果: 2

numpy-array 创建:

  1. import numpy as np
  2. # 以下方式中 np. 被省略
  3. #方式1.:
  4. array() # 将列表转换为数组,可选择显式指定 dtype
  5.  
  6. # 方式2:
  7. arange() # python3 range的numpy版,支持浮点数
  8.  
  9. # 方式3:
  10. linspace() # 类似 np.arange() ,第三个参数为数组长度
  11.  
  12. # 方式4:
  13. zeros() # 根据指定形状和dtype创建全0数组
  14. # 方式5:
  15. ones() # 根据指定形状和dtype创建全1数组
  16.  
  17. # 方式6:
  18. empty() # 根据指定形状和dtype创建空数组(随机值)
  19.  
  20. # 方式7:
  21. eye() # 根据指定形状和dtype创建单位矩阵

示例代码:(运行在jupytor notebook上)

  1. # numpy-array 的创建
  2. import numpy as np
  3.  
  4. # 方式一:
  5. np.array([1,2,3])
  6. # 输出结果: array([1, 2, 3])
  7.  
  8. # 方式二: 创建10个全0的数组 (数组中的元素默认为 浮点数 类型)
  9. np.zeros(10)
  10. # 输出结果: array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])
  11. a = np.zeros(5)
  12. a.dtype
  13. # 输出结果: dtype('float64')
  14.  
  15. # 指定 元素类型
  16. b = np.zeros(3,dtype="int64")
  17. b.dtype
  18. # 输出结果:dtype('int64')
  19.  
  20. # 方式三:创建5个全1的数组(默认为 浮点数 类型)
  21. np.ones(5)
  22. # 输出结果: array([1., 1., 1., 1., 1.])
  23. c = np.ones(5)
  24. c.dtype
  25. # dtype('float64')
  26.  
  27. # 方式四:创建长度为10的空数组(随机值)
  28. np.empty(20)
  29. """
  30. # 输出结果:
  31. array([1.42417221e-306, 1.37961641e-306, 1.24610383e-306, 1.69118108e-306,
  32. 8.06632139e-308, 1.20160711e-306, 1.69119330e-306, 1.29062229e-306,
  33. 1.60217812e-306, 1.37961370e-306, 1.78020712e-306, 8.90104239e-307,
  34. 1.05700515e-307, 1.11261774e-306, 1.29060871e-306, 8.34424766e-308,
  35. 8.34445138e-308, 1.37959129e-306, 1.02360528e-306, 8.90029544e-307])
  36. """
  37. # np.empty() 的作用: 数组的大小(长度)是不能变的,所以创建数组时必须先指定好数组的长度,然后再往里面写入值; np.empty() 的效率比 np.zeros()高(速度快)
  38.  
  39. # 方式五:np.arange(起始值,结束值,步长) # 步长可为 浮点数
  40. np.arange(10)
  41. # 输出结果: array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
  42. np.arange(2,10)
  43. # 输出结果: array([2, 3, 4, 5, 6, 7, 8, 9])
  44. np.arange(3,10,2)
  45. # 输出结果: array([3, 5, 7, 9])
  46. np.arange(7,10,0.3)
  47. # 输出结果: array([7. , 7.3, 7.6, 7.9, 8.2, 8.5, 8.8, 9.1, 9.4, 9.7])
  48.  
  49. # 方式六: np.linspace(起始值,结束值,分成多少份) # 第三个参数“分成多少份”表示数组的长度
  50. np.linspace(2,10,3)
  51. # 输出结果: array([ 2., 6., 10.]) # 数组元素的间隔是一样的
  52. d = np.linspace(1,10,20)
  53. d.size
  54. # 输出结果: 20
  55.  
  56. # np.arange() 是“顾首不顾尾”; np.linspace() "顾首且顾尾"
  57.  
  58. # np.linspace() 的用法:
  59. import matplotlib.pyplot as plt
  60. x = np.linspace(-10,10,10000)
  61. y = x**2
  62.  
  63. plt.plot(x,y)
  64. # [<matplotlib.lines.Line2D at 0x19089552d30>]
  65.  
  66. plt.show()
  67.  
  68. # 方式七:np.eye() # 创建线性矩阵 (对角线上是1,其他元素为0)
  69. np.eye(10)
  70. """
  71. # 输出结果:
  72. array([[1., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
  73. [0., 1., 0., 0., 0., 0., 0., 0., 0., 0.],
  74. [0., 0., 1., 0., 0., 0., 0., 0., 0., 0.],
  75. [0., 0., 0., 1., 0., 0., 0., 0., 0., 0.],
  76. [0., 0., 0., 0., 1., 0., 0., 0., 0., 0.],
  77. [0., 0., 0., 0., 0., 1., 0., 0., 0., 0.],
  78. [0., 0., 0., 0., 0., 0., 1., 0., 0., 0.],
  79. [0., 0., 0., 0., 0., 0., 0., 1., 0., 0.],
  80. [0., 0., 0., 0., 0., 0., 0., 0., 1., 0.],
  81. [0., 0., 0., 0., 0., 0., 0., 0., 0., 1.]])
  82.  
  83. """

np.linspace()用途的 plt.show() 效果图:

array 索引和切片:

ndarray-批量运算:

  1. import numpy as np
  2. a = np.arange(10)
  3. #1. 数组和标量之间的运算:
  4. a+1 a*3 1//a a**0.5 a>5
  5. # 2. 同样大小数组之间的运算:
  6. a+b a/b a**b a%b a==b a > b # 最后两个返回bool值

ndarray-索引:

  1. # 一维数组的索引:
  2. a[5]
  3. # 多维数组的索引:
  4. 列表式写法: a[2][3]
  5. 新式写法: a[2,3] # [2,3] -- 2表示行,3表示列;逗号前是行,逗号后是列

ndarray - 切片:

  1. # 一维数组的切片:
  2. a[5:8]
  3. a[4:]
  4. a[2:10] = 1
  5. # 二维数组的切片:
  6. a[1:2,3:4]
  7. a[:,3:5]
  8. a[:,1]

示例代码:(jupyter notebook)

  1. # array索引和切片
  2.  
  3. # ndarray--索引:
  4. import numpy as np
  5.  
  6. # 快速生成一个二维数组的方法:
  7. np.arange(15).reshape((3,5)) # reshape() 里面放一个元组(a,b),a表示行数,b表示列数;.reshape()即将 原数组变成 a行 b列 的多维数组
  8. """
  9. # 输出结果:
  10. array([[ 0, 1, 2, 3, 4],
  11. [ 5, 6, 7, 8, 9],
  12. [10, 11, 12, 13, 14]])
  13. """
  14.  
  15. a = np.arange(15).reshape((3,5))
  16.  
  17. # 索引一:
  18. a[1][2] # 第一行 第三列 (行和列都是从0开始)
  19. # 输出结果: 7
  20. # 索引二:(对于二维数组);主要用这个
  21. a[1,2] # [1,2] --- 1 表示行, 2表示列
  22. # 输出结果: 7
  23.  
  24. # ndarray - 切片
  25. # 1. 一维数组的切片:
  26. np.arange(15)
  27. # 输出结果: array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14])
  28.  
  29. b = np.arange(15)
  30. b[0:4] # 也是 “顾首不顾尾”
  31. # 输出结果: array([0, 1, 2, 3])
  32. b[:5]
  33. # array([0, 1, 2, 3, 4])
  34. b[5:]
  35. # array([ 5, 6, 7, 8, 9, 10, 11, 12, 13, 14])
  36.  
  37. # 数组 和 列表 的不同:
  38. c = list(range(15)) # 列表
  39. c
  40. # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
  41.  
  42. d = b[0:4] # 数组
  43. d
  44. # array([0, 1, 2, 3])
  45.  
  46. e = c[0:4] # 列表
  47. e
  48. # [0, 1, 2, 3]
  49. d[0] = 20 # 数组:此时会修改原数组 b 的值
  50. b
  51. # array([20, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14])
  52.  
  53. e[0] = 20 # 列表 : 此时不会修改原列表的值
  54. c
  55. # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
  56.  
  57. # copy() 方法可以创建数组的深拷贝
  58. f = b[0:4].copy()
  59. f
  60. # array([20, 1, 2, 3])
  61.  
  62. f[0] = 30 # 通过 copy()方法 ,此时就不会修改原数组的值
  63. b
  64. # array([20, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14])
  65.  
  66. # 二级数组的切片:
  67. bia = np.arange(15).reshape((3,5))
  68. bia
  69. """
  70. array([[ 0, 1, 2, 3, 4],
  71. [ 5, 6, 7, 8, 9],
  72. [10, 11, 12, 13, 14]])
  73. """
  74. # 切出 0,1,5,6 这四个值
  75.  
  76. # 错误写法:
  77. bia[0:2][0:2]
  78. """
  79. array([[0, 1, 2, 3, 4],
  80. [5, 6, 7, 8, 9]])
  81. """
  82. """
  83. # 错误分析:
  84. bia[0:2] 切出的结果如下:
  85. array([[0, 1, 2, 3, 4],
  86. [5, 6, 7, 8, 9]])
  87. 因为 bia[0:2] 默认是按行切,即 从第0行 切到 第1行
  88. 此时 bia[0:2] 继续如果继续按照 [0:2] 切,那么得到的依然是原数组(因为还是继续按行切)
  89. """
  90.  
  91. # 正确写法:
  92. bia[0:2,0:2] # [,] 逗号前面是行切,逗号后面是列切
  93. """
  94. array([[0, 1],
  95. [5, 6]])
  96. """
  97.  
  98. # 切 7,8,12,13 这四个数
  99. bia[1:3,2:4]
  100. """
  101. array([[ 7, 8],
  102. [12, 13]])
  103. """
  104. bia[1:,2:4] # 另一种写法
  105. """
  106. array([[ 7, 8],
  107. [12, 13]])
  108. """
  109.  
  110. """
  111. 数组切片与列表的不同:数组切片时并不会自动复制(而是创建一个视图),在切片数组上的修改会影响原数组
  112. .copy() 方法可以创建数组的深拷贝
  113. """

array 布尔型索引:

  1. # 问题:给一个数组,选出数组中所有大于5的数
  2. a[a>5]
  3.  
  4. #原理:
  5. 1. 数组与标量的运算: a>5 会对a中的每一个元素进行判断,返回一个布尔数组
  6. 2. 布尔型索引: 将同样大小的布尔数组传进索引,会返回一个由所有True对应位置的元素的数组

示例代码:

  1. # ndarray 布尔型索引
  2. # 问题1:给一个数组,选出数组中所有大于5的数
  3. import numpy as np
  4. import random
  5.  
  6. a = [random.randint(0,10) for i in range(20)]
  7. a = np.array(a)
  8. a[a>5]
  9. # array([ 8, 9, 6, 7, 8, 8, 8, 7, 6, 7, 10])
  10. """
  11. a[a>5] 的过程分析:
  12. 第一步是 a>5 返回一组 布尔值 (即 数组和标量做运算);
  13. 第二步是 a[] 中放一个 布尔型的 列表 或者 数组,且这个列表(或数组)的长度和 a 相同,则 a[] 会将所有为 True 的元素过滤出来返回
  14. """
  15. a = np.arange(4)
  16. a
  17. # array([0, 1, 2, 3])
  18. a[[True,False,False,True]]
  19. # array([0, 3])
  20.  
  21. # 问题二:给一个数组,选出数组中所有大于5的偶数
  22. b = [random.randint(0,10) for i in range(20)]
  23. b = np.array(b)
  24. # 方式一:
  25. c = b[b>5]
  26. c[c%2==0]
  27. # array([ 6, 10, 10, 8])
  28.  
  29. # 错误写法:
  30. # b[b>5][b%2==0] # 这种写法会报错,因为 [b%2==0] 的长度是 b 的长度, 而 b[b>5] 是一个新的数组,长度已经不再是 b 的长度,所以长度不一致
  31.  
  32. # 方式二:两个条件写到一个 [] 中
  33. b[(b>5) & (b%2==0)] # 用 & 连接多个条件,并且由于位运算符的优先级,每个条件要加上 () ;此处的 & 不能换成 and ,换成 and 会报错;& 表示 与,| 表示 或,~ 表示 非
  34. b[(b>5)| (b%2==0)]

array -- 花式索引:

  1. # 问题1:对于一个数组,选出其第1,3,4,6,7 个元素,组成新的二维数组
  2. a[[1,3,4,6,7]]
  3. # 问题2:对于一个二维数组,选出其第一列和第三列,组成新的二维数组
  4. a[:,[1,3]]

示例代码:

  1. # ndarray - 花式索引
  2. # 问题1:对于一个数组,选出其第1,3,4,6,7 个元素,组成新的二维数组
  3. import numpy as np
  4.  
  5. a = np.arange(20)
  6. # 错误写法:
  7. # a[1,3,4,6,7] # 逗号 分的是 行和列
  8. # 正确写法:(对于一维数组)
  9. a[[1,3,4,6,7]] # a[] 中 放一个列表,列表中放索引值
  10. # array([1, 3, 4, 6, 7])
  11.  
  12. # 对于二维数组:
  13. b = np.arange(20).reshape(4,5)
  14. b
  15. """
  16. array([[ 0, 1, 2, 3, 4],
  17. [ 5, 6, 7, 8, 9],
  18. [10, 11, 12, 13, 14],
  19. [15, 16, 17, 18, 19]])
  20. """
  21.  
  22. # 普通索引、切片、布尔索引、花式索引,想要行列搭配,就用 中间一个 逗号,逗号左右用哪种都可以
  23. b[0,2:4] # 左边用常规索引,表示第0行,右边用切片
  24. # array([2, 3])
  25.  
  26. b[0,b[0]>2] # 逗号左边是普通索引,右边是布尔索引
  27. # array([3, 4])
  28. b[0:2,b[0]>2] # b[0]>2 返回的是 布尔型数组:array([False, False, False, True, True])
  29. """
  30. array([[3, 4],
  31. [8, 9]])
  32. """
  33.  
  34. # 注意:花式索引 和 花式索引 不能同时出现在 逗号 两边,如下:想选取 b 中的 6,8,16,18
  35. b[[1,3],[1,3]] # 不要用这种写法
  36. # array([ 6, 18]) # 逗号两个都是花式索引时,不会得到自己想要的结果
  37.  
  38. # 选取 b 中的 6,8,16,18:分步去取
  39. b[[1,3],:][:,[1,3]] # [[1,3],:] -- 行上取1和3行,列上全取;[:,[1,3]] 列上取1和3列,行上全取
  40. """
  41. array([[ 6, 8],
  42. [16, 18]])
  43. """

NumPy -- 通用函数:

通用函数: 能同时对数组中所有元素进行运算的函数
常见通用函数:

  1. 1. 一元函数: abc sqrt exp log ceil floor rint trunc modf isnan isinf cos sin tan
  2. 2. 二元函数: add substract multiply divide power mod maximum minimum

示例代码:

  1. # 通用函数
  2. import numpy as np
  3. a = np.arange(-5,5)
  4. a
  5. # array([-5, -4, -3, -2, -1, 0, 1, 2, 3, 4])
  6.  
  7. abs(a) # python 内置的 abs 也能对数组进行绝对值操作
  8. # 输出结果: array([5, 4, 3, 2, 1, 0, 1, 2, 3, 4])
  9.  
  10. np.abs(a) # 对数组中的每个元素进行绝对值操作
  11. # array([5, 4, 3, 2, 1, 0, 1, 2, 3, 4])
  12.  
  13. np.sqrt(a) # 对数组中的每个元素进行 开方(二次方) 运算
  14. """
  15. array([ nan, nan, nan, nan, nan,
  16. 0. , 1. , 1.41421356, 1.73205081, 2. ])
  17. """
  18.  
  19. # 小数变整数的方法:
  20. # 1. int 方法: 向 0 取整法(向0的方法取整)
  21. b = 1.6
  22. int(b)
  23. # 输出结果: 1
  24.  
  25. c = -1.6
  26. int(c)
  27. # 输出结果: -1
  28.  
  29. # 2. round 方法: 四舍五入 ;小数位的值小于 0.5时,向0取整,小数位的值大于等于0.5时 向 0 的反方向取整
  30. round(b)
  31. # 输出结果: 2
  32.  
  33. round(c)
  34. # 输出 结果: -2
  35.  
  36. import math
  37.  
  38. # 3. 向上取整
  39. # 3.1 . math.ceil()
  40. math.ceil(b)
  41. #
  42. math.ceil(c)
  43. # -1
  44.  
  45. # 4. 向下取整
  46. # 4.1 . math.floor()
  47. math.floor(b)
  48. # 输出结果: 1
  49. math.floor(c)
  50. # -2
  51.  
  52. d = np.arange(-5.5,5.5)
  53. d
  54. # array([-5.5, -4.5, -3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, 3.5, 4.5])
  55.  
  56. # 数组的取整:
  57.  
  58. # 1. np.floor(数组) : 对数组中的所有元素进行 向下取整
  59. np.floor(d)
  60. # array([-6., -5., -4., -3., -2., -1., 0., 1., 2., 3., 4.])
  61.  
  62. # 2. np.ceil(数组) : 对数组中的所有元素进行 向上取整
  63. np.ceil(d)
  64. # array([-5., -4., -3., -2., -1., -0., 1., 2., 3., 4., 5.])
  65.  
  66. # 3. np.round(数组) : 对数组中的元素进行 四舍五入
  67. np.round(d)
  68. # array([-6., -4., -4., -2., -2., -0., 0., 2., 2., 4., 4.])
  69.  
  70. """
  71. 在实际使用中发现round函数并不总是如上所说的四舍五入。可参考以下链接:
  72. http://www.runoob.com/python/func-number-round.html
  73. http://www.runoob.com/w3cnote/python-round-func-note.html
  74. """
  75.  
  76. # 4. np.rint(数组) : 作用和 np.round() 一样
  77. np.rint(d)
  78. # array([-6., -4., -4., -2., -2., -0., 0., 2., 2., 4., 4.])
  79. # 5. np.trunc(数组) : 对数组中的每个数值进行 向0取整
  80. np.trunc(d)
  81. # array([-5., -4., -3., -2., -1., -0., 0., 1., 2., 3., 4.])
  82.  
  83. # np.modf(数组) : 返回两个数组, 一个数组中是 小数 部分,一个数组中是 整数 部分
  84. np.modf(d)
  85. """
  86. (array([-0.5, -0.5, -0.5, -0.5, -0.5, -0.5, 0.5, 0.5, 0.5, 0.5, 0.5]),
  87. array([-5., -4., -3., -2., -1., -0., 0., 1., 2., 3., 4.]))
  88. """
  89. x,y = np.modf(d) # 可用元组、列表的方式接收
  90. x
  91. # 输出结果: array([-0.5, -0.5, -0.5, -0.5, -0.5, -0.5, 0.5, 0.5, 0.5, 0.5, 0.5])
  92. y
  93. # 输出结果: array([-5., -4., -3., -2., -1., -0., 0., 1., 2., 3., 4.])
  94.  
  95. # 数组的 inf
  96. e = np.arange(0,5)
  97. e
  98. # array([0, 1, 2, 3, 4])
  99.  
  100. 5/e
  101. # array([ inf, 5. , 2.5 , 1.66666667, 1.25 ])
  102.  
  103. # 数组的 nan
  104. np.sqrt(d)
  105. """
  106. array([ nan, nan, nan, nan, nan,
  107. nan, 0.70710678, 1.22474487, 1.58113883, 1.87082869,
  108. 2.12132034])
  109. """
  110.  
  111. """
  112. 补充: 浮点数特殊值
  113. 1. nan (not a number):不等于任何浮点数(nan != nan)
  114. 2. inf (infinity):比任何浮点数都大
  115. 3. NumPy 中创建特殊值:np.nan 和 np.inf
  116. 4. 在数据分析中, nan 常被用作表示数据缺失值
  117. """
  118.  
  119. # float("amaosi") # 对这种字符串进行 float() 会报错
  120. float("nan") # 对字符串 "nan" 进行 float 则不会报错
  121. # 输出结果: nan
  122. float("inf")
  123. # 输出结果: inf
  124.  
  125. e/e
  126. # 输出结果: array([nan, 1., 1., 1., 1.])
  127.  
  128. np.nan
  129. # 输出结果: nan
  130.  
  131. np.nan == np.nan
  132. # 输出结果: False
  133.  
  134. np.nan is np.nan
  135. # 输出结果: True
  136.  
  137. f = e/e
  138. f
  139. # 输出结果: array([nan, 1., 1., 1., 1.])
  140.  
  141. # 判断 f 中是否有 nan
  142.  
  143. f == np.nan
  144. # 输出结果: array([False, False, False, False, False])
  145. # 所以不能用类似布尔型索引判断 f 中是否有 nan
  146.  
  147. f is np.nan
  148. # 输出结果: False # 这种方式也不行
  149.  
  150. np.nan in f
  151. # 输出结果: False
  152.  
  153. # 正确方法: np.isnan(数组) 方法: 返回数组中是否有 nan ; ** 该方法很重要,用于缺失值处理
  154. np.isnan(f)
  155. # 输出结果: array([ True, False, False, False, False])
  156.  
  157. # 用法: 去掉 f 中的 nan
  158. f[~np.isnan(f)] # ~ 表示“非”; & 表示“与”, | 表示“或”
  159. # 输出结果: array([1., 1., 1., 1.])
  160.  
  161. # inf 的相关:
  162. float("inf") > 10000000000000000000000000000000
  163. # 输出结果: True
  164.  
  165. # 去掉数组中的 inf :
  166. m = np.array([1,2,3,4,5])
  167. n = np.array([1,0,1,0,1])
  168. k = m/n
  169. k
  170. # 输出结果: array([ 1., inf, 3., inf, 5.])
  171.  
  172. # 方式一:
  173. k[k!=np.inf]
  174. # 输出结果: array([1., 3., 5.])
  175. # 方式二:
  176. k[~np.isinf(k)]
  177. # 输出结果: array([1., 3., 5.])
  178.  
  179. # 二元函数:能放两个数组
  180. # np.maximum(数组1,数组2) # 返回较大的数
  181. m = np.array([6,2,8,9,7])
  182. n = np.array([4,5,3,10,5])
  183. np.maximum(m,n)
  184. # 输出结果: array([ 6, 5, 8, 10, 7])

numpy -- 统计方法和随机数生成:

1. 数学和统计方法:

  1. sum # 求和
  2. mean # 求平均数
  3. std # 求标准差
  4. var # 求方差
  5. min # 求最小值
  6. max # 求最大值
  7. argmin # 求最小值的索引
  8. argmax # 求最大值的索引

2. NumPy随机数生成:

  1. rand # 给定形状产生随机数组(0到1之间的数)
  2. randint # 给定形状产生随机整数
  3. choice # 给定形状产生随机选择
  4. shuffle # 与 random.shuffle 相同
  5. uniform # 给定形状产生随机数组

numpy模块的更多相关文章

  1. Python:基本运算、基本函数(包括复数)、Math模块、NumPy模块

    基本运算 x**2 : x^2 若x是mat矩阵,那就表示x内每个元素求平方 inf:表示正无穷 逻辑运算符:and,or,not 字典的get方法 a.get(k,d) 1 1 get相当于一条if ...

  2. 【Python 数据分析】Numpy模块

    Numpy模块可以高效的处理数据,提供数组支持.很多模块都依赖他,比如:pandas.scipy.matplotlib 安装Numpy 首先到网站:https://www.lfd.uci.edu/~g ...

  3. python numpy模块

    目录 numpy模块 一维数组 二维数组(用的最多的) 获取多维数组的行和列 多维数组的索引 高级功能 多维数组的元素的替换 通过函数方法创建多维数组 矩阵的运算 点乘和转置(了解) 点乘必须 m*n ...

  4. Python及bs4、lxml、numpy模块包的安装

    http://blog.csdn.net/tiantiancsdn/article/details/51046490(转载) Python及bs4.lxml.numpy模块包的安装 Python 的安 ...

  5. numpy模块(对矩阵的处理,ndarray对象)

    6.12自我总结 一.numpy模块 import numpy as np约定俗称要把他变成np 1.模块官方文档地址 https://docs.scipy.org/doc/numpy/referen ...

  6. Python3:numpy模块中的argsort()函数

    Python3:numpy模块中的argsort()函数   argsort函数是Numpy模块中的函数: >>> import numpy >>> help(nu ...

  7. 3 numpy模块

    Numpy     什么是Numpy:Numeric Python         Numpy模块是Python的一种开源的数值计算扩展.             1 一个强大的N维数组对象Array ...

  8. Day 19 numpy 模块

    numpy 模块(多维数组) import numpy as np arr=np.array([1,2,3,4],[5,6,7,8]) print(arr) #[[1 2 3 4] #[5 6 7 8 ...

  9. Pathon中numpy模块

    目录 numpy模块 切割矩阵 矩阵元素替换 矩阵的合并 通过函数创建矩阵 fromstring/fromfunctions 矩阵的运算 常用矩阵运函数 矩阵的点乘 矩阵的逆 矩阵的其他操作 nump ...

  10. 开发技术--Numpy模块

    开发|Numpy模块 Numpy模块是数据分析基础包,所以还是很重要的,耐心去体会Numpy这个工具可以做什么,我将从源码与 地产呢个实现方式说起,祝大家阅读愉快! Numpy模块提供了两个重要对象: ...

随机推荐

  1. logging模块进阶

    python利用logging模块来记录日志主要涉及四个类 logger提供了应用程序可以直接使用的接口 handler将logger创建的日志提供的输出发送到指定目的地. filter起到过滤作用, ...

  2. poj2441 Arrange the Bulls

    思路: 状态压缩dp.需要一点优化,否则容易超时. 实现: #include <cstdio> #include <vector> #include <cstring&g ...

  3. [BZOJ1053][SDOI2005]反素数ant 数学

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1053 假设这个最大的反素数为$x$,那么$1<p<x$中数的因子数都没有$x$ ...

  4. $("xxx").attr添加属性的时候不好用

    今天在工作中碰到了使用$(this).attr("selected","selected")为option属性添加默认值时发现时而好用 时而不好用,后经百度发现 ...

  5. Struts2 前端与后台之间传值问题

    老是被前端与后台之间的传值给弄糊涂了,特此写一篇blog进行总结. 一. 前端向后台传值 (1)属性驱动 属性驱动是指在Action类里,包含表单里对应的字段(字段名称一样),同时设置对应的gette ...

  6. sccm系统更新补丁后服务无法正常启动

    更新完补丁后这几个应用无法启动,最后发现计算机丢失msvcp120.dll 文件,查询相关资料发现安装vcredist 2013 从官网下载Visual C++ Redistributable Pac ...

  7. Docker下redis的主从配置

    1.拉取redis镜像docker pull redis2.启动3个redis容器服务,分别使用到6379.6380.6381端口docker run --name redis-6379 -p 637 ...

  8. linux 隐藏进程

    1.首先推荐一个后门程序https://github.com/f0rb1dd3n/Reptile 具体可以了解一下功能非常强大. 2.源码如下 root@ubuntu:/var/srt/libproc ...

  9. SoapUI对于Json数据进行属性值获取与传递

    SoapUI的Property Transfer功能可以很好地对接口请求返回的数据进行参数属性获取与传递,但对于Json数据,SoapUI会把数据格式先转换成XML格式,但实际情况却是,转换后的XML ...

  10. Android studio Github 断开连接

    http://blog.csdn.net/agoodcoolman/article/details/50562301 使用软件:Android studio svn:Github 从github直接从 ...