[学习笔记] Numpy基础

上专业选修《数据分析程序设计》课程,老师串讲了Numpy基础,边听边用jupyter敲了下——理解+笔记。

老师讲的很全很系统,有些点没有记录,在PPT里就不搬了。

环境:python3.6 vscode+jupyter扩展

  1. #%%
  2. #------------------------------2019.9.23 NumPy-----------------------------
  3. import numpy as np
  4. # 1.NumPy在一个连续的内存块中存储数据
  5. # 2.性能差异
  6. my_arr = np.arange(100000)
  7. my_list = list(range(10000))
  8. print(my_arr)
  9. #%%
  10. # 1.ndarry:一种多维数组对象
  11. data = np.random.randn(2,3)
  12. print(data,'\n')
  13. print(data*10,'\n')
  14. print(data+data,'\n')
  15. # 1.1.ndarry通用的同构数据多为容器——所有元素必须是相同类型的
  16. # .shape 返回表示各维度大小的元组
  17. # .dtype 返回类型
  18. print(data.shape)
  19. print(data.dtype)
  20. #%%
  21. # 1.2.创建ndarry
  22. # 1.2.1.用array函数直接创建,dtype自动判定
  23. data_list = [1,1.5,2]
  24. arr1 = np.array(data_list)
  25. print(arr1)
  26. data2 = [[1,2,3,4],[5,6,7,8]]
  27. arr2 = np.array(data2)
  28. print(arr2.dtype)
  29. # 可以用属性ndim和shape验证
  30. arr2.ndim #只返回维数
  31. # eg:arr_empty = np.empty((2,3,4,2))
  32. # arr_empty为4
  33. #%%
  34. #一般numpy创建的数组类型为浮点数
  35. # 1.2.2特定函数创建数组,传入表示形状的元组即可。
  36. # zeros
  37. # ones
  38. # empty 创建一个没有任何具体值的数组
  39. arr_zero = np.zeros(10)
  40. arr_one = np.ones((2,3))
  41. arr_empty = np.empty((2,3,4,2))
  42. print(arr_zero)
  43. print(arr_one)
  44. print(arr_empty)
  45. print(arr_empty.ndim)
  46. # arange
  47. np.arange(15)
  48. # 位矩阵
  49. #%%
  50. # 1.3类型
  51. # 创建时指定
  52. arr3 = np.array([1,2,3])
  53. arr4 = np.array([1,2,3],dtype='float64')
  54. print(arr3.dtype)
  55. print(arr4.dtype)
  56. # 转换类型
  57. arr3 = arr3.astype(np.float64)
  58. print(arr3.dtype)
  59. # 浮点型转整数——舍弃小数点后
  60. arr_float = np.random.rand(1,10)*10
  61. print(arr_float)
  62. arr_float = arr_float.astype(np.int32)
  63. print(arr_float)
  64. # 某字符串数组表示的全是数字,可以直接用astype转为数值形式
  65. arr_string = np.array(['1.0','2.0','3.0'])
  66. print(arr_string.dtype)
  67. arr_string = arr_string.astype(np.float64)
  68. print(arr_string.dtype)
  69. print(arr_string)
  70. #adtype总会创建一个数据备份,即使现类型和目标类型相同
  71. #%%
  72. # 1.4运算
  73. arr = np.array([[1.,2.,3.], [4.,5.,6.]])
  74. print(arr)
  75. print(arr-arr)
  76. print(arr*arr)
  77. print(1/arr)
  78. print(arr**0.5) #和标量运算,数组每个元素都和此标量运算
  79. arr_compare = np.array([ [0,4,1], [7,2,12] ])
  80. print(arr_compare > arr)
  81. #%%
  82. # 1.5切片、索引
  83. # 对数字切片的修改,是直接对数组本身修改(python的list列表不是,是对副本操作)
  84. # 对ndarray切片的副本操作:arr[5:8].cpoy()。这样不更改原数组
  85. arr_sl = np.arange(10)
  86. print(arr_sl)
  87. arr_sl[3:6] = 999 #广播
  88. print(arr_sl)
  89. arr_slice = arr_sl[3:6]
  90. arr_slice[:] = 888
  91. print(arr_sl)
  92. li = list(range(10))
  93. list_slice = li[2:8]
  94. list_slice[0] = 666
  95. print(list_slice)
  96. print(li)
  97. arr2d = np.array([[1.,2.,3.], [4.,5.,6.]])
  98. #索引
  99. print(arr2d[0][1])
  100. #同
  101. print(arr2d[0,1])
  102. #多维数组中,若省略了后面的索引,则返回对象是一个维度低一点的ndarray
  103. arr3d = np.array([ [ [1,2,3],[4,5,6] ], [ [7,8,9],[10,11,12] ] ])
  104. print(arr3d.shape)
  105. print(arr3d)
  106. print(arr3d[0,1]) # 访问索引已(0,1)开头的那些值
  107. arr3d[0] = 999
  108. print(arr3d)
  109. #%%
  110. #1.6布尔
  111. # 布尔型索引选取数组中的数据,总是创建副本,即使返回一模一样的数组也是
  112. names = np.array(['Bob','Peter','Bob','Jenny'])
  113. data_arr = np.random.randn(4,7)
  114. print(data_arr)
  115. arr_bool = names=='Bob'
  116. print(arr_bool) #[ True False True False]
  117. print(data_arr[arr_bool])
  118. print('------------------------')
  119. print(data_arr[names=='Bob',5:]) #选取Bob,并索引列
  120. #%%
  121. # 1.6.2 布尔取反
  122. # way1:
  123. names!='Bob'
  124. # way2:
  125. data_arr[~(names=='Bob')]
  126. #%%
  127. # 1.6.3 布尔组合
  128. mask = (names=='Bob')|(names=='Peter')
  129. data_arr[mask]
  130. data_arr[data_arr>1]
  131. #%%
  132. # 1.7花式索引
  133. # 为了按特定顺序选中数据,那么传入表示顺序的[]即可
  134. data = np.arange(80).reshape((8,10))
  135. data[[3,1,4]]
  136. data[[1,5,3],[0,3,2]] #返回(1,0),(5,3),(3,2)位置的数据
  137. data[[1,5,7,2]][:,[0,3,1,2]] #列所有元素都输出,但按0 3 1 2的顺序
  138. # 行 列
  139. #%%
  140. # 1.7.1花式索引的转置
  141. # 花式索引和切片不一样,它总是副本
  142. # 转置不是副本,是本身
  143. arr = np.arange(15).reshape((3,5))
  144. arr.T
  145. # transpose 高维数组转置
  146. #%%
  147. # 2.通用数组
  148. arr = np.arange(10)
  149. print(np.sqrt(arr))
  150. print(arr)
  151. # 每个位置上,最大的那个
  152. # np.maximum(x,y)
  153. # 分别返回小数部分、整数部分
  154. remainder, whole_part = np.modf(arr)
  155. print(remainder)
  156. print(whole_part)
  157. # abs
  158. # square
  159. # exp
  160. # log log10 log2 log1p
  161. # ...
  162. #%%
  163. # 3利用数组进行数据处理
  164. # 3.1
  165. points = np.arange(-5,5,0.01)
  166. xs,ys = np.meshgrid(points,points) # 生成网格点坐标矩阵
  167. ys
  168. # 3.2 np.where
  169. arr = np.random.randn(3,4)
  170. print(arr)
  171. print(np.where(arr>0,2,-2))
  172. # 3.3数学和统计方法
  173. # 既可以当实例方法,也可以当顶级numpy函数用
  174. print(arr.mean())
  175. # 对特定轴向
  176. arr.mean(axis=0) #对列求
  177. # 或
  178. arr.mean(0)
  179. arr.sort(1) #对行排序就地排序
  180. np.unique(arr) #删除重复的元素
  181. # cumsum对特定轴
  182. arr = np.arange(9).reshape(3,3)
  183. print(arr)
  184. print(arr.cumsum(1))
  185. # 同理 cumprod 累乘
  186. # 对布尔型
  187. arr = np.random.randn(100)
  188. print( (arr>0).sum() )
  189. # any() 检查数组中是否存在>=1个True
  190. # all() 检查数组中是否全为True
  191. #%%
  192. # 4.线性代数
  193. # x.dot(y) 同 np.dot(x,y)
  194. # diag 返回对角线矩阵
  195. # trace
  196. # det
  197. # eig
  198. # inv
  199. # pinv
  200. # qr
  201. # svd
  202. #%%
  203. # 5.伪随机数生成
  204. # 正态分布
  205. samples = np.random.normal(size=(3,3))
  206. # 标准整体分布
  207. ss = np.random.randn(3)
  208. # 给定上下限随机整数
  209. sss = np.random.randint(10,size=(4)) # [4 6 4 1]

[学习笔记] Numpy基础 系统学习的更多相关文章

  1. Linux学习笔记之——基础命令学习

    1.find 按照名字查找:find / -name file_name   2.zip压缩 1) 我想把一个文件repartition.txt和一个目录invader压缩成为amateur.zip: ...

  2. Python学习笔记之基础篇(-)python介绍与安装

    Python学习笔记之基础篇(-)初识python Python的理念:崇尚优美.清晰.简单,是一个优秀并广泛使用的语言. python的历史: 1989年,为了打发圣诞节假期,作者Guido开始写P ...

  3. MyBatis:学习笔记(1)——基础知识

    MyBatis:学习笔记(1)--基础知识 引入MyBatis JDBC编程的问题及解决设想 ☐ 数据库连接使用时创建,不使用时就释放,频繁开启和关闭,造成数据库资源浪费,影响数据库性能. ☐ 使用数 ...

  4. C#学习笔记(基础知识回顾)之值类型和引用类型

    一:C#把数据类型分为值类型和引用类型 1.1:从概念上来看,其区别是值类型直接存储值,而引用类型存储对值的引用. 1.2:这两种类型在内存的不同地方,值类型存储在堆栈中,而引用类型存储在托管对上.存 ...

  5. mybatis学习笔记之基础复习(3)

    mybatis学习笔记之基础复习(3) mybatis是什么? mybatis是一个持久层框架,mybatis是一个不完全的ORM框架.sql语句需要程序员自己编写, 但是mybatis也是有映射(输 ...

  6. Quartz学习笔记:基础知识

    Quartz学习笔记:基础知识 引入Quartz 关于任务调度 关于任务调度,Java.util.Timer是最简单的一种实现任务调度的方法,简单的使用如下: import java.util.Tim ...

  7. ELK-6.5.3学习笔记–elk基础环境安装

    本文预计阅读时间 13 分钟 文章目录[隐藏] 1,准备工作. 2,安装elasticsearch. 3,安装logstash. 4,安装kibana 以往都是纸上谈兵,毕竟事情也都由部门其他小伙伴承 ...

  8. Java后端高频知识点学习笔记1---Java基础

    Java后端高频知识点学习笔记1---Java基础 参考地址:牛_客_网 https://www.nowcoder.com/discuss/819297 1.重载和重写的区别 重载:同一类中多个同名方 ...

  9. bootstrap学习笔记之基础导航条 http://www.imooc.com/code/3111

    基础导航条 在Bootstrap框中,导航条和导航从外观上差别不是太多,但在实际使用中导航条要比导航复杂得多.我们先来看导航条中最基础的一个--基础导航条. 使用方法: 在制作一个基础导航条时,主要分 ...

随机推荐

  1. git怎么合并远程分支

    一共就五步: 1.把代码clone到本地仓库 git clone https://github.com/573734817pc/shop.git 2.在本地创建dev分支并与远程dev分支对应 git ...

  2. springboot --- 之SSM框架整合

    1.pom依赖: 即:spring-boot的基本jar ---- 内置springmvc和spring Thymeleaf jar 热部署 jar ---方便二次加载 ctrl+f9再次编译 Myb ...

  3. docker环境部署mysql

    参考文档 docker官方:https://hub.docker.com/_/mysql/?tab=description 部署步骤 1. 拉取镜像 这里我拉取了tag为5.7的镜像 docker p ...

  4. 一些matlb会用到的函数

    matlab这种软件功能很强大,但是都不是常常会用到,尤其是像在学生中.每次用的时候总会把一些基本的函数忘记,还的去网上查.我之前在使用的时候也总结过,可惜在一次数据丢失中全没了(︶︹︺). 从现在开 ...

  5. python-多任务编程04-生成器(generator)

    生成器是一类特殊的迭代器,创建方法比自定迭代器类更加简单 使用()创建生成器 把列表生成式的 [ ] 改成 ( ) In [15]: L = [ x*2 for x in range(5)] In [ ...

  6. vue+axios+springboot文件下载

    //前台代码 <el-button size="medium" type="primary" @click="downloadFile" ...

  7. js获取json对象的属性值

    //   var responseData = response.data.result;             for (var r in responseData) {              ...

  8. 关于docker--详解安装,常规操作,导入导出等(2017-3-29)

    测试环境 :CentOS 7.1 64位 目的:展示docker的常规使用(安装,常规操作,导入导出等) 其他:关于原理等请参考文章后面的延伸阅读,本文不做深入探讨,且方法不唯一 0x01 关于安装d ...

  9. onsubmit校验表单时利用ajax的return false无效解决方法-转

    原来的代码 function checkNewEmail(){ var re_email=new RegExp("\\w+@\\w+\\.\\w+\\.?\\w*");      ...

  10. Spring Security OAuth2之resource_id配置与验证

    一.resource_id的作用 Spring Security OAuth2 架构上分为Authorization Server认证服务器和Resource Server资源服务器.我们可以为每一个 ...