第12周Python学习周记
&关于计划:
一、Numpy库的学习(学习完毕);
二、Matplotlib的学习(进行中,预计13周之内完成);
三、Markdown的学习(进行中);
(本文内容参考于简书教程)
&时间:第12周
&内容摘要:
一、
1.当我们对数组进行操作的时候,我们需要注意一个很重要的概念——复制和视图
(1)完全不复制:(一个数据域,一个数组对象,多个名字)
①简单的赋值不会创建数组对象或其数据的拷贝:
>>> import numpy as np
>>> a = np.arange(12)
>>> b = a #没有创建新的对象
>>> b is a #a 和 b是同一数 组对象的两个名字
True
>>> b.shape = 3,4 #改变b的形状(同 时改变b的形状——因为a 和 b引用同一数组对象)
>>> a.shape
(3, 4)
#(a和b完全相通)
②Python将引用对象作为引用传递,因此函数调用不会复制
>>> def g(x):
... print(id(x))
...
>>> id(a)
2339740615344
>>> g(a) #同样的,a 和 x是 同一数组对象的两个名字
2339740615344
(2)视图或浅复制:(一个数据域,不同数组对象,共享相同数据域)
不同的数组对象可以共享相同的数据。
①view()方法创建一个新数组对象,该对象看到相同的数据。
>>> c = a.view()
>>> c is a #c不是a,是新的数组对象
False
>>> c.base is a
#c是以a的数据为基础建立的对象
True
>>> c.flags.owndata
False
>>> c.shape = 2,6 #!a的形状不会(随C改变)
>>> a.shape
(3, 4)
>>> a
array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]])
>>> c[0,4] = 1234
#a的数据会随c改变(因为 它们共享数据)
>>> a
array([[ 0, 1, 2, 3],
[1234, 5, 6, 7],
[ 8, 9, 10, 11]])
#(a和c唯数据相通,形状独立)
Ps:一个易错点:
>>> e = d.view()
>>> e.base is d
True
>>> d.base is e
False
②对数组切片返回一个视图:
>>> s = a[:,1:3] #a[1:3]->取第一个和第二个元素;a[:,1:3]取第一和第二列元素
>>> s[:] = 10 #对s(作为a的视图)赋值,a随之改变(s和a共享数据)
>>> a
array([[ 0, 10, 10, 3],
[1234, 10, 10, 7],
[ 8, 10, 10, 11]])
(3)深复制:(数据和数据对象,完全复制到另一个名字下)
copy方法生成数组及其数据的完整拷贝
>>> d = a.copy() #新对象d
>>> d is a #d和a是两个独立无相关对象
False
>>> d.base is a #数据不共享
False
>>> d
array([[ 0, 10, 10, 3],
[1234, 10, 10, 7],
[ 8, 10, 10, 11]])
>>> a
array([[ 0, 10, 10, 3],
[1234, 10, 10, 7],
[ 8, 10, 10, 11]])
>>> d[0,0] = 9999
>>> a
array([[ 0, 10, 10, 3],
[1234, 10, 10, 7],
[ 8, 10, 10, 11]])
>>> d
array([[9999, 10, 10, 3],
[1234, 10, 10, 7],
[ 8, 10, 10, 11]])
2.用imag方法操作数组的虚部
>>> a = np.array([1+2j, 3+4j, 5+6j]) #构造复数数组
>>> a.imag
array([ 2., 4., 6.]) #数组形式返回a的各元素虚部
>>> a.imag = np.array([8,10,12]) #数组形式对a的各元素虚部赋值
>>> a
array([ 1. +8.j, 3.+10.j, 5.+12.j])
3.花式索引和索引技巧
(1)使用索引数组索引
A.
>>> a = np.arange(12)**2
>>> a
array([ 0, 1, 4, 9, 16, 25, 36, 49, 64, 81, 100, 121], dtype=int32)
>>> i = np.array([2,2,6,8,7]) #作为一个存储position的数组
>>> a[i] #把单子i拿过来按图索骥
array([ 4, 4, 36, 64, 49], dtype=int32)
>>> j = np.array([[3,4],[8,9]])
>>> a[j]
array([[ 9, 16],
[64, 81]], dtype=int32)
#对应position和data返回矩阵
B.多维度索引
>>> a = np.arange(12).reshape(3,4)
>>> a
array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]])
>>> i = np.array([[0,1],
... [1,2]]) #构建索引位置矩阵
>>> a[i] #对应i的内容和形式返回矩阵
array([[[ 0, 1, 2, 3], #a的第0个元素
[ 4, 5, 6, 7]], #a的第1个元素
[[ 4, 5, 6, 7], #a的第1个元素
[ 8, 9, 10, 11]]]) #a的第2个元素
>>> a[i,2] #a[i]索引返回的数组中,取每一个元素的2位置的数出来再构造一个数组
array([[ 2, 6],
[ 6, 10]])
>>> j = np.array([[2,1],
... [3,3]])
>>> a[i,j] #i的n位结合j的n位构成一个索引坐标,在a
中按图索骥!注意此处i和j的形状要一样
array([[ 2, 5], #例如,(i[0],j[0])=(0,2),则 a[0,2]->2;接着a[1,1]->5, 以此类推
[ 7, 11]])
>>> a[:,j]
array([[[ 2, 1],
[ 3, 3]], #a的第一个元素的j数组对应位置
[[ 6, 5],
[ 7, 7]], #a的第二个元素的j数组对应位置
[[10, 9],
[11, 11]]]) #a的第三个元素的j数组对应位置
(2)使用布尔数组索引(可以非常方便地察看、选择数据)
>>> import numpy as np
>>> a = np.arange(12).reshape(3,4)
>>> b = a > 4
>>> b
array([[False, False, False, False],
[False, True, True, True],
[ True, True, True, True]], dtype=bool)
>>> a[b]
array([ 5, 6, 7, 8, 9, 10, 11])
>>> a
array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]])
>>> a[b] = 0
>>> a
array([[0, 1, 2, 3],
[4, 0, 0, 0],
[0, 0, 0, 0]])
4.好玩的ix_()函数(可以用于组合不同的向量,便于向量运算)
>>> import numpy as np
>>> a = np.array([2,3,4,5])
>>> b = np.array([8,5,4])
>>> c = np.array([5,4,6,8,3])
>>> ax,bx,cx = np.ix_(a,b,c) #用ix_()函数组合向量
>>> ax
array([[[2]],
[[3]],
[[4]],
[[5]]])
>>> bx
array([[[8],
[5],
[4]]])
>>> cx
array([[[5, 4, 6, 8, 3]]])
>>> ax.shape, bx.shape, cx.shape #组合完毕,向量各占一元
((4, 1, 1), (1, 3, 1), (1, 1, 5))
>>> result = ax+bx*cx
#将完成组合的向量加以 运算,得到的结果矩阵存储 给数组对象
>>> result
array([[[42, 34, 50, 66, 26],
[27, 22, 32, 42, 17],
[22, 18, 26, 34, 14]],
[[43, 35, 51, 67, 27],
[28, 23, 33, 43, 18],
[23, 19, 27, 35, 15]],
[[44, 36, 52, 68, 28],
[29, 24, 34, 44, 19],
[24, 20, 28, 36, 16]],
[[45, 37, 53, 69, 29],
[30, 25, 35, 45, 20],
[25, 21, 29, 37, 17]]])
>>> result[3,2,4]
#给予对应abc的参数,可以 从结果矩阵中调出结果
17
>>> a[3]+b[2]*c[4] #跟普通方法结果一致
17
二、
1.使用默认配置画一个图:
A.代码:
B.效果:
2.改变线条的粗细和颜色以及设置图片边界:
代码和效果:
第12周Python学习周记相关推荐
- Python学习周记
经过这一段时间的学习,还是学到了许多,下面就依次进行总结: 一.数字类型 1.整型(int) 就是表示一个整数的数值,如-1.0.1这些都是整型,它可以用于计算,例如: print(1*8) > ...
- 第一周python学习
星期一 1.序列 #记录生肖 s='猴鸡狗猪鼠牛虎兔龙蛇马羊' print(s[0:4]) print(s[-1]) year=2018 print(year%12) print(s[year%12] ...
- Python学习周记(序列)
目录 一.序列 1.序列的切片: 2.关于序列的相加.相乘 3.检查某个元素是否存在于序列当中 4.计算序列的长度.最大.最小值.求和. 二.列表(list) 1.列表(list)的创建 2.列表(l ...
- 第12周前端学习周报
书: HTML: 1.超文本标记语言,并非编程语言. 2.通过标记符来标识网页中内容的显示方式,如图片的显 示尺寸,大小,文字的大小.颜色.字体. 3.浏览器负责解释标记符,依次显示内容. 第一个HT ...
- 测验3: 基本数据类型 (第3周)Python学习记录
1 pow(x, 0.5)能够计算x的平方根,计算负数的平方根将产生: 无输出 复数 程序崩溃 ValueError错误 正确答案 B pow(-1, 0.5) (6.123233995736766e ...
- Python学习周记(字符串、格式化字符串、正则表达式)
目录 一.字符串之字符串的相关操作 1.字符串的创建 2.字符串的拼接 3.计算字符串的长度 4.截取字符串 5.分隔字符串 6.去除字符串左右两边的某些字符 7.检索字符串 7.1查看字符串中某个字 ...
- Python学习笔记:Day 12 编写日志列表页
前言 最近在学习深度学习,已经跑出了几个模型,但Pyhton的基础不够扎实,因此,开始补习Python了,大家都推荐廖雪峰的课程,因此,开始了学习,但光学有没有用,还要和大家讨论一下,因此, 写下这些 ...
- 12个Python超强学习网站
1.CSDN 特点:从免费视频到入门项目,从入门到进阶,学习视频应有尽有,还有Python学习社区,良好的学习和沟通氛围. 2.Python123 特点:北京理工大学搭建的学习python 的网站:可 ...
- Python学习笔记:Day 16 编写移动App
前言 最近在学习深度学习,已经跑出了几个模型,但Pyhton的基础不够扎实,因此,开始补习Python了,大家都推荐廖雪峰的课程,因此,开始了学习,但光学有没有用,还要和大家讨论一下,因此,写下这些帖 ...
最新文章
- python和R对dataframe创建新的列或者改变列:dplyr、rename、map、mapvalues、astype、as.character、as.integer、as.numeric
- 《数学之美》第24章 马尔可夫链的扩展--贝叶斯网络
- WPF 4 开发Windows 7 跳转列表(JumpList)
- cxf开发Restful Web Services
- C语言再学习 -- 位、字节、字、字长、字元的关系
- springmvc中@PathVariable和@RequestParam的区别
- win7设置自动开机时间_电脑可以设置自动开机时间,您知道吗?
- mysql的每隔1分钟定时_mysql定时任务
- 虚拟机无法接受组播消息_IPTV(组播)骨干网完整解决方案--四川广电网络
- PS图片无损放大插件 Alien Skin Blow Up 3 for Mac
- JavaScript 工作原理之二-如何在 V8 引擎中书写最优代码的 5 条小技巧(译)
- html中字体 楷体_css设置各种中文字体如雅黑、黑体、宋体、楷体等等
- Oracle数据库练习题(3)
- Trickbot 年度版本变化情况
- Prometheus Operator 安装
- 12306的(再次破解)从查票到购票
- CSS的背景——颜色,图片,背景图片位置,
- vivado xilinx IOB = true的使用
- PerformanceManagementSystem
- EPICS ‘makeBaseApp’ IOC
热门文章
- $(img)是什么意思_什么原因可以让你坚持跑步?医生总结5点,足以让你告别懒惰...
- 4 angular 重构 项目_再遇angular(angular4项目实战指南)
- 如何修改was的java路径_在eclipse中修改tomcat的部署路径操作
- 宝塔如何备份网站_宝塔备份网站怎样还原_服务器备份数据恢复教程
- java中.length得到结果_Java length()方法:获取字符串的长度
- 物联网核心安全系列——智能监控安全问题
- Git撤销之世上真有后悔药
- 本部裁员、分部招人,科技公司的岗位都奔向了外地?
- Python可视化工具Matplotlib 3.0版出炉,改进默认后端选择,饼图终于变圆了
- 数据库开源 | 200人中英文混说数据库开放申请