github上的项目,跟着一起学习
项目地址 https://github.com/MLEveryday/100-Days-Of-ML-Code
得到JK VanderPlas写的书《Python数据科学手册(Python Data Science HandBook)》,Jupyter notebooks在这里。(https://github.com/jakevdp/PythonDataScienceHandbook)
高清中文版pdf。(https://github.com/MLEveryday/100-Days-Of-ML-Code/blob/master/Other%20Docs/Python%E6%95%B0%E6%8D%AE%E7%A7%91%E5%AD%A6%E6%89%8B%E5%86%8C.zip)
第2章:NumPy介绍,包括数据类型、数组和数组计算。
代码如下:
2 NumPy入门
2.1 理解Python中的数据类型
2.2 NumPy数组基础
2.3 NumPy数组的计算:通用函数
读书笔记:
2、Numpy入门
数据格式:文档、图像(二维数字数组,数字代表各区域像素值)、声音片段(时间和强度的一维数组)、文本(二进制数表示特定单词或单词对出现的频率)、数值。看成数字数组。
Numpy(Numerical Python),类似python内置的列表类型
安装Anaconda,带了Numpy,打开Anoconda命令行,进入python,查看numpy版本
通常np作为numpy的别名
打开notebook,内置文档
np.<TAB> 显示numpy命名空间的所有内容
np? 显示numpy的内置文档
2.1、理解python中的数据类型
python是动态类型的语言,使用变量前,不需要声明类型,类型是动态推断的
x=4
x="four"
2.1.1、python整形不仅仅是一个整形
标准的Python实现是用C编写的。每个python对象都是一个聪明的伪C语言结构体。python3.4中整形(其实是指针)的定义:
2.1.2、Python列表不仅仅是一个列表
列表:python中的标准可变多元素容器
创建整形值列表:L = list(range(10))
创建字符串列表:L2 = [str(c) for c in L]
创建异构的列表:L3 = [True, "2", 3.0, 4]
动态类型的列表和固定类型的数组间的区别:
2.1.3、从python列表创建数组
np.array([1, 4, 2, 5, 3], dtype='float32')
设置数组的数据类型,dtype
多维数组 np.array([range(i, i+3) for i in [2, 4, 6]])
2.1.5、从头创建数组
# 长度为10,值都为0
np.zeros(10, dtype=int)
# 3*5的浮点型数组,值都为1
np.ones((3, 5), dtype=float)
# 3*5的浮点型数组,值都为1
np.full((3, 5), 3.14)
# 3*5的浮点型数组,数组的值是线性序列,从0开始,到20结束,步长为2
np.arrange(0, 20, 2)
#创建一个5个元素的数组,这5个数均匀分配到0~1
np.linspace(0, 1, 5)
#创建3*3的、在0-1均匀分布的随机数组成的数组
np.random((3, 3))
#3*3的、均值为0,方差为1的正太分布的随机数组
np.random.normal(0, 1, (3, 3))
#3*3的、[0, 10)区间的随机整数数组
np.random.randint(0, 10, (3, 3))
#3*3的单位矩阵
np.eye(3)
#3个整形数组成的未初始化的数组
np.empty(3)
2.1.6、Numpy标准数据类型
2.2 、NumPy数组基础
获取数组或字数组,分裂、变形、连接数组
数组属性:数组大小、形状、存储大小、数据类型
索引
切分
变形
拼接和分裂
2.2.1、Numpy数组的属性
定义3个随机数组:
import numpy as np
np.random.seed(0)
x1=np.random.randint(10, size=6)
x2=np.random.randint(10, size=(3, 4))
x3=np.random.randint(10, size=(3, 4, 5))
属性:维度ndim、每个维度的大小shape、总大小size
print("x3 ndim: ", x3.ndim)
print("x3 shape: ", x3.shape)
print("x3 size: ", x3.size)
每个数组元素字节大小itemsize,数组总字节大小nbytes
print("itemsize: ", x3.itemsize, "bytes")
print("nbytes: ", x3.nbyte, "bytes")
2.2.2、数组索引:获取单个元素
获取末尾索引,用负值索引
浮点数插入整形数组,会被截短
2.2.3、数组切片slice:获取字数组
x[staart:stop:step] #参数未指定,分别默认设置为0、维度大小、1
一维子数组
当步长为负数,start和stop默认被交换,逆序数组
多维子数组
多维子数组逆序
获取数组的行和列
获取单行和单列
获取行时,可省略空的切片
numpy数组切片,切的是原数组;python切的是数组的副本
创建数组副本copy()
2.2.4、数组的变形reshape()
将数字1-9放入3*3矩阵
grid=np.arrange(1, 10).reshape(3, 3)
将一个一维数组转变为二维数组的行或列的矩阵,切片的newaxis
2.2.5、数组拼接和分裂
(1)拼接np.concatenate、np.vstack、np.hstack
np.concatenate拼接一维数组
np.concatenate拼接二维数组,默认拼到下边;axis=1,拼到右边
垂直栈np.vstack
水平栈np.hstack
np.dstack将沿着第三个维度拼接数组
(2)分裂
np.split、np.hsplit、np.vsplit
np.split()
np.hsplit、np.vsplit
2.3、NumPy数组的计算:通用函数
2.3.1、缓慢的循环
一个数组,计算每个元素的倒数
测量运行时间的魔法函数%timeit
2.3.2、通用函数介绍
向量操作
2.3.3、探索numpy的通用函数
(1)数组的运算
加、减、乘、除
逻辑非、**指数运算、%模
所有numpy实现的算数运算符
(2)绝对值np.absolute
处理复数时,绝对值返回的是复数的幅度
(3)三角函数
定义一个角度数组theta = np.linspace(0, np.pi, 3)
计算sin、cos、tan
逆三角函数:arcsin、arccos、arctan
(4)指数和对数
指数计算
指数的逆运算,对数np.log
一些特殊版本,对于非常小的值,保持较好的精度
(5)专用的通用函数
双曲三角函数、比特位运算、比较运算符、弧度转化为角度、取整、求余
子模块scipy.special,对数据进行晦涩的运算(搜gamma function python,找这些包的文档)
2.3.4、高级的通用函数特性
(1)指定输出
将计算结果直接写入期望的存储位置 out参数
这一特性也可被用作数组视图,结果写入指定数组每隔一个元素的位置
(2)聚合
一个reduce方法会对给定的元素和操作重复执行,直到得到单个的结果
对add调用reduce,返回数组中所有元素的和
需要存储每次计算的中间结果,使用accumulate
(3)外积
通用函数,用outer方法获得2个不同输入数组所有元素对的函数运算结果。用一行代码实现乘法表
2.3.5、通用函数:更多的信息