5-Numpy似双丝网,中有千千结(下)

“横看成岭侧成峰,远近高低各不同。Numpy渐欲迷人眼,浅草刚能没马蹄。”古人为了描述Numpy中Array的变幻莫测和难以掌控,曾留下千古名句,为后世传颂。阅读理解题:本诗前两句描述的是Array中的哪种操作?答案:切片。(看完男默女泪……气氛渐渐凝固 ( ̄▽ ̄")

不扯没用的了,下面我们来学习一些硬知识。有了上篇做铺垫,相信下篇学起来一定会如鱼得水,酣畅淋漓,欲罢不能!

02

多维数组

上篇提到的例子都是一维数组,其实Numpy可以创建任意维度的数组,所有之前提到的方法也可以应用在多维数组上。例如:一个列表的列表可以用来初始化一个二维数组:

通过二维数组我们已经发现了Array的强大(确定不是自嗨?):一个嵌套的List可以通过多次使用[ ]运算符来做索引访问元素,而多维数组支持一种更加自然的索引方法,即只用一个[ ]及多个用逗号隔开的标号来访问元素:

事实上,数组的形状可以随时改变,只要元素的总数不变就行。例如:我们需要一个从0递增的2x4数组,可以这样初始化:

  • 视图,而非拷贝

变形(reshape)操作和Numpy中的大部分其他操作类似,只是提供相同内存的不同视图:

这种浅拷贝行为使得向量化运算非常高效。如果需要深拷贝,可按下面操作:

  • 切片

对于多维数组,我们也可以使用切片,并可把切片和单个索引值混合使用(分别用在不同维度上),仍以上面的arr2为例:

如果只用一个索引值,则会返回低一维的数组,包含索引值所指的那一行:

  • 数组的属性和方法

我们已经学会了如何创建多维数组,现在来了解一下数组的常用属性和方法。下面这些属性提供数组的大小、形状、数据类型等基本信息:

数组也有很多有用的方法,下面列出一些特别有用的:

上面的方法都是针对数组所有元素来做运算的,而对于多维数组,我们也可通过传入axis参数,实现只在某一维度上进行计算:

从上例可以看出,axis参数值代表运算进行时所消耗的那个维度值。这就是为什么在行方向上求和时需要设定axis=0。

Array的另一个常用属性是.T,可以返回该数组(或矩阵)的转置:

  • 数组运算

数组支持所有常规的数学运算,numpy库中包含一整套可作用于数组上的基本数学函数。需要记住的是,所有面向数组的运算都是按元素进行的(Element-wise),即对数组中的所有元素同时生效。例如:

另外还需记住,数组的乘法运算也是按元素进行的,而不像线性代数中的矩阵乘法运算那样。

也可以乘以一个标量:

下面是一个“广播”的例子:

视觉化理解“广播”

这种为迁就对方而变形的行为实在太默契了,竟然让群主眼眶湿润 (☆▽☆)y

  • Element-wise函数

前面我们提到,numpy提供一整套作用于array上的数学函数,包括对数、指数、三角函数等。例如,在正弦函数上[0,2*pi]区间内均匀取100个样本点,可以用下面方法轻松实现:

  • Numpy中的线性代数运算

Numpy提供一套基本的线性代数函数库,如所有数组都可以应用dot方法,当参数为两个向量(一维数组)时,进行的是向量的标量积运算;当参数中至少有一个为二维数组时,进行的是传统的矩阵乘法运算。

下面是一个常见的矩阵向量乘法例子,注意数组v1应被看作一个列向量。Numpy并不区分行向量和列向量,只是简单地校验维度是否符合矩阵乘法运算规则。在下例中,我们用一个2x3的矩阵和一个3维向量相乘,得到一个2维向量:

对于矩阵乘法,相同的维度匹配规则也要被满足。考虑A×A.T和A.T×A的区别:

这节课的学习笔记好长,差点把群主整残了(ㄒoㄒ)/

Anyway,结果是最重要的,终于陪大家钻过了第一个火圈,倍感欣慰:)

下一周讲Pandas入门。人生若只如初见,何事秋风悲画扇,让我们休整一下疲惫的心,以对待初恋的心态迎接下一个、下下一个关卡吧!

时间: 2024-08-09 14:44:30

5-Numpy似双丝网,中有千千结(下)的相关文章

4-Numpy似双丝网,中有千千结(上)

迄今为止,大家已经学习了Python中一些常用的数据结构,如字符串.元祖.列表.字典--群主以温水煮青蛙的耐心慢慢引领着大家,终于来到了Numpy这个水深火热的沸水区!To jump or not to jump?皮糙肉厚的群主已经为大家试过水温,经验表明,不脱一层皮是爬不出来的-- Numpy是Python的一个科学计算库,提供了矩阵运算的功能.Numpy中的ndarray(多维数组)数据结构可用来表示向量(1-dimension)和矩阵(N-dimension).和Numpy中的Array比

AppCan CTO 赵庆华:双创背景下的移动开发及变现之路

在移动互联网的大爆发下,移动双创.技术变现的机会越来越多,落地也更为简便.移动开发者通过代码.创意快速感知用户,创造新的价值.在国内的移动企业中,正益移动以其独一无二的商业模式,和两大重磅品牌:移动技术平台AppCan和移动生态平台正益工场,将开发者.企业客户.合作伙伴串联起来,让移动技术推动商业模式升级.推助"双创"落地,备受业界赞誉. 在近期的CTO讲堂活动中,AppCan CTO赵庆华分享了创业历程.技术进阶心得.企业级项目经验等,将16年技术实践路娓娓道来,以下为文字实录: C

双系统Ubuntu下修复启动项的两种方法

1,先安装Win7,再安装Ubuntu,则在安装完ubuntu后会直接进入Ubuntu系统,进入系统后执行: #sudo updata-grub 更新grub,让其找到win7的bootloader,重启,在grub界面即可看到进入win7的选项. 2,先安装了Ubuntu,再安装的win7.此时,硬盘的MBR里面之前的grub引导记录被覆盖,需要重新将grub信息写入MBR中.由于磁盘中已有ubuntu系统,只需将该系统中grub信息写进MBR即可.方法如下:制作一个ubuntu系统的Live

IMAC双系统WIN下截屏快捷键

一.Mac下有自带的截图功能 新Mac用户根本不必麻烦去寻找截屏软件,默认快捷键是 全屏幕截图:Command+Shift+3 区域截图:Command+Shift+4 随后按 Space(空格) 可以选定窗口截图 Mac下屏幕快照快捷键可以自定义设置: 系统偏好设置——键盘——键盘快捷键 Mac下截图默认保存在桌面上,格式为PNG: 二.苹果电脑在Win系统中,由于Macbook键盘上是没有Print Screen按键的 大家可以用如下方法截图: 全屏截图:fn+shift+F11 窗口截图:

OpenGL蓝宝书第七章:立体天空和纹理折射、双纹理(下)

对比了蓝宝书,才知道红宝书的优点. reflect函数的原理在红宝书中有说明,只有对比了红宝书,才知道红宝书的定位:高级工具书. 蓝宝书作为入门级书籍,以较快的速度让读者敲到代码去思考,总遗留了需要探索的内容. 蓝宝书要看完. 红宝书要看完. C++11 标准版英文版也看了小部分. 多线程入门都不算. Socket只能实现基础网络连接,离真正的数据通信都算,何况多人在线对战网络模型的实现 设计模式看了又忘了,忘了又看,如果没有机会去设计模块级别的代码实现,真的血了没用,难道改UI?加班赶工哪有魄

linux 和win7 双系统模式下 忘记win7 密码的修改方法

首先登陆linux系统,在linux 系统下找到win7系统的安装盘(比如为C盘), (1)进入到C://windows/system32下 找到osk.exe 文件,并将其剪切到其他的地方(记住这个地方,后面还会将此文件粘贴回来的) (2)将C://windows/system32文件下的cmd.exe 重命名为osk.exe (3)关机,开机进入win7系统,在登陆界面的左下角有“轻松访问”,在弹出的窗口中勾选“启动屏幕键盘”,弹出确定命令提示符 (4)在命令提示符下输入 net user

numpy中双冒号的作用

1 import numpy as np 2 a = np.array([[1, 2, 3, 1, 3, 5], [4, 5, 6, 2, 4, 3]]) 3 print('a') 4 print(a) 5 print(a[:, 0::2]) 6 7 # a 8 # [[1 2 3 1 3 5] 9 # [4 5 6 2 4 3]] 10 # [[1 3 3] 11 # [4 6 4]] 12 13 b = np.array([[1, 2, 3, 1, 3, 5], [4, 5, 6, 2, 4

windows下python安装Numpy、Scipy、matplotlib模块

网上找了半天,终于把要安装的资料找到了.其他的不怎么全,就自己再次总结一下写. 我自己安装的是python 2.7.所以以下的东东都是针对2.7的软件. numpy :http://sourceforge.net/projects/numpy/files/NumPy/1.8.1/   下载下面的numpy-1.8.2-win32-superpack-python2.7 scipy:http://sourceforge.net/projects/scipy/files/ matplotlib:ma

Win7下硬盘安装Linux双系统

参考如下两篇文章,基本能搞清楚如何安装. 1. Win7下硬盘安装Linux双系统 Win7下硬盘安装CentOS6.2 http://www.3fwork.com/b902/002405MYM032666/ 2. Windows7硬盘安装Fedora16图文教程 http://blog.chinaunix.net/uid-14735472-id-3232574.html 为防止链接内容删除,粘贴如下: Win7下硬盘安装Linux双系统 Win7下硬盘安装CentOS6.2 一.准备工作:划出