学习《机器学习100天》第32天 深入研究 | NUMPY

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、通用函数:更多的信息

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值