• Python数据分析之numpy的使用


    作者将自己学习numpy的代码+笔记分享一下,想学哪一部分就把哪一部分的注释去掉即可,便于初学者学习和复习:

    1. import numpy as np
    2. '''主要是根据数据构建算法可能用到的矩阵,对于矩阵可以进行相应的处理变换'''
    3. #将一个列表输出成一维向量,列表的列表输出为矩阵
    4. # The numpy.array() 可以将一个列表输出成一维向量 列表的列表输出为矩阵(即上面说的ndarray)
    5. vector = np.array([5, 10, 15, 20]) # 一维向量(当然也是矩阵)
    6. # 矩阵,矩阵中的列表值必须为相同类型,只要有字符,就全变为字符,如果有True,就定义为1
    7. matrix = np.array([[5, 10, 15], [20, 25, 30], [35, 40, 45],[33,22,33]])
    8. # print(vector)
    9. # print(matrix)
    10. # #
    11. # print(vector.shape) #(4,)
    12. # # .shape输出矩阵维度
    13. # print(matrix.shape)#(4, 3)表示四行三列
    14. # print(matrix[:,1])#取所有行的第2列
    15. #
    16. # vec_equal_to_ten=(vector==10)
    17. #
    18. # #找到矩阵中有没有值等于一个数,返回的是含有布尔值的列表
    19. # print(vec_equal_to_ten)
    20. #
    21. # #输入有10的那一行,在一维向量中,每一个数都是行
    22. # #这个可以检查所有数中有没有该值,没有的话就返回[],比True和False快速
    23. # print(vector[vec_equal_to_ten])
    24. #
    25. # #检查矩阵中所有行的第二列是否有等于25的,如果有就返回该行
    26. # matrix_second_col_25=matrix[:,1]==25
    27. #
    28. # print(matrix[matrix_second_col_25])
    29. #
    30. # #与或表达式
    31. # vec_equal_to_ten_or_five=(vector==10)|(vector==5)
    32. # print(vector[vec_equal_to_ten_or_five])
    33. # #改变所有值的操作,不改变原来矩阵的类型
    34. # vec=vector.astype(str)#把矩阵中所有元素变成字符串,但是不改变矩阵结构
    35. # print(vec)
    36. # print(vector)
    37. # #生成0~14组成的向量
    38. # m=np.arange(15)
    39. # print(m)
    40. # print(m.reshape(3,5))#一共15个向量,将向量变成3*5的矩阵
    41. #
    42. # # #形状,元素个数,数据类型名称,维度:一般都是二维矩阵
    43. # print(m.shape,m.size,m.dtype.name,m.ndim)
    44. # # 注意zeros()中需是一个元祖
    45. # print(np.zeros((3, 4))) # 默认float类型
    46. # # 三维矩阵(每个元素都是整数1),两?三行四列,高维不知道怎么说
    47. # print(np.ones((2, 3, 4), dtype=np.int32))
    48. #
    49. # print(np.arange(10, 30, 5)) # 10开始<30结束,每5个取一个值
    50. #
    51. '''默认从0到1产生随机数,产生二行三列的数组'''
    52. # print(np.random.random((2,3)))
    53. ##返回一组具有标准正态分布的样本
    54. # print(np.random.randn(2,4))
    55. # #这个pi必须要说明是从numpy引入的,否则当作变量处理
    56. # from numpy import pi
    57. # # 起始0到2*pi平均取100个值
    58. # print(np.linspace(0, 2 * pi, 10))#是平均取值
    59. # a = np.array([20,30,40,50])
    60. # b = np.arange(4)
    61. # # b**2表示矩阵所有元素平方
    62. # print(b**2)
    63. # # a<35表示对矩阵所有元素判断,每个元素都返回布尔值
    64. # print(a<35)
    65. #
    66. # '''A*B表示AB矩阵的元素本身相乘
    67. # 而A.dot(B)/np.dot(A,B)是AB两个矩阵做矩阵乘法运算'''
    68. # print(b)
    69. # # 求指数幂
    70. # print(np.exp(b))
    71. # # 开方
    72. # print(np.sqrt(b))
    73. # a = np.floor(10*np.random.random((3,4)))# floor函数表示向下取整
    74. # print(a)
    75. # print("--------------------------------")
    76. # # ravel函数把矩阵拉成一个向量
    77. # print(a.ravel())
    78. # print("--------------------------------")
    79. # #注意a.shape()是永久改变数组结构,而reshape函数不改变
    80. # a.shape = (6,2)
    81. # # a.reshape(3,-1) 当行或列确定后,另一个可以置为-1,它自己会算出正确结果
    82. # print(a)
    83. # print("--------------------------------")
    84. # # 转置
    85. # print(a.T)
    86. # a = np.floor(10 * np.random.random((2, 2)))
    87. # b = np.floor(10 * np.random.random((2, 2)))
    88. # print(a)
    89. # print("--------------------")
    90. # print(b)
    91. # print("--------------------")
    92. # # 横着拼接
    93. # print(np.hstack((a, b)))
    94. # print("--------------------")
    95. # # 纵着拼接
    96. # print(np.vstack((a, b)))
    97. '''np.hsplit(a,(3,4)) 是一个 numpy 函数,它用于沿着水平轴(列)将数组 a 分割成多个子数组。在这种情况下,它将在第3列和第4列之后分割数组 a。
    98. 这意味着,它将返回三个子数组:第一个包含前三列,第二个包含第四列,第三个包含剩余的列1。'''
    99. # a = np.floor(10*np.random.random((2,12)))
    100. # print(a)
    101. # print("--------------")
    102. # # 按行切分 ,切成3份
    103. # print(np.hsplit(a,3))
    104. # print("--------------")
    105. # # 指定位置切分
    106. # print(np.hsplit(a,(3,4)))
    107. # b = a.T
    108. # print(b)
    109. # print("--------------")
    110. # # 按列切:vsplit是横着切,hsplit是竖着切
    111. # c=np.vsplit(b,3)
    112. # print(c)
    113. '''a=b地址赋值,深复制
    114. a=b.view()只是指向不同,但是值居然是共用的
    115. a=b.copy()指向不一样,值也不一样,推荐使用这个copy()'''
    116. # a = np.arange(12)
    117. # # a和b指向同一个东西(只是名字不同)
    118. # b = a
    119. # print(b is a)
    120. # print(b.shape)
    121. # print(a.shape)
    122. # print(id(a))# 对应内存上唯一的一个区域
    123. # print(id(b))
    124. '''提取每列最大最小值,其实也可以提取每行的最大最小值'''
    125. # # 这些元素是从0到19的整数的正弦值,其实就是对于矩阵的运算,几乎都是对矩阵元素进行的变换
    126. # # 所以就是将这个矩阵中的元素求sin值
    127. # data = np.sin(np.arange(20).reshape(5,4))
    128. # print(data)
    129. # # 使用 argmax 函数沿着第0轴(即行)找到每一列的最大值的位置(即索引)。这些索引存储在名为 ind 的数组中。
    130. # ind = data.argmax(axis=0)
    131. # print(ind) #该位置索引从0开始
    132. # # 通过ind 取出每列对应的最大值,data.shape在本例中是(5,4),所以data.shape[1]就是4
    133. # data_max = data[ind, range(data.shape[1])]
    134. # print(data_max)
    135. # # 既然0轴是挑选每一列的最大值,那么1轴我猜就是挑选每一行的最大值,甚至我猜有argmin函数
    136. # inr = data.argmax(axis=1)
    137. # print(inr)
    138. # data_max1 = data[range(data.shape[0]),inr]
    139. # print(data_max1)
    140. # # 列的最大值,索引就在行的位置,因为列已经固定了,索引变化的是行
    141. # # 行的最大值,索引就是列的位置
    142. '''数组扩展(其实就是生成一个新的矩阵,矩阵中的元素就是该数组的复制粘贴),matlab中也有类似的操作'''
    143. # a = np.arange(0, 40, 10)
    144. # print(a)
    145. # # 扩展a(扩展两行三列)
    146. # b = np.tile(a, (2,3))
    147. # print(b)
    148. '''每行排序,也可以返回对应关系的索引'''
    149. # a = np.array([[4, 3, 5,],
    150. # [1, 2, 1]])
    151. # print(a)
    152. # print("--------------------")
    153. # # 按行排序(每行从小到大排)
    154. # b = np.sort(a,axis=1)# 其实本质上来说,axis横轴纵轴就是指示了处理数据的方向
    155. # #因为处理数据的方向是纵轴方向,所以在纵轴上点一个,就是处理一行,再往下点一个,就是继续处理下一行
    156. # print(b)
    157. # print("--------------------")
    158. # print(a) #验证a矩阵是否改变,结果是不变
    159. # print("--------------------")
    160. # a.sort(axis=1) #对a矩阵每行从小到大的排序将永久赋值到a
    161. # print(a)
    162. # print("--------------------")
    163. # a = np.array([4, 3, 1, 2])
    164. # # 返回从小到大的数据对应的索引
    165. # j = np.argsort(a)
    166. # print(j)
    167. # print("--------------------")
    168. # print(a[j])# 通过索引取出值
  • 相关阅读:
    架构之路15. 创业 - 厌倦
    压线生填报志愿不用愁,看这一篇就够了
    Tomcat 源码解析一初识
    造轮子之权限管理
    BIM → CIM,捷码赋能智慧城市多行业应用开发
    ES学习看这一篇文章就够了
    关于nginx升级--存在0day漏洞
    C++进阶篇4---番外-AVL树
    冒泡排序详细详解
    J2EE进阶(九)org
  • 原文地址:https://blog.csdn.net/qq_65052774/article/details/133972472