1:了解NUmpy
- 主要介绍什么是为什么回有数组、数组对象和数组对象的作用
1.1:为什么会有NUmpy
- 在数据分析的过程中,需要接触的数据是非常多的,但是普通的python数据类型对于处理大,大量的数据可能会显得力不从心(处理数据的效率会变慢),这个时候人们就迫切的需要一种可以快速处理大量数据的数据类型,所以数组(Numpy中的一个数据类型)就诞生了
- 对于处理数据需要的数据类型的发展
内建数据结构,list
array模块
Numpy基础包
1.2:什么是Numpy
- Numpy(Numerical Python)是目前Python数值计算中最为重要的基础包。大多数计算包都提供了基于Numpy的科学函数功能,将Numpy的数组对象作为数据交换的通用语。
1.3:Numpy的特点
- 提供了基于数组的便捷算术操作以及广播机制
- 对数据进行快速的矩阵计算
- 对硬盘中数组数据进行读写操作
- 提供了高效多维数组
1.4:Numpy的安装
- 由于Numpy是一个python中的一个第三方库,所以安装方式就是使用pip进行安装
pip install numpy
拓展(理解python的数据类型)
动态类型语言
- python是动态类型语言,也就是说对于变量的类型不需要进行声明,在这个变量存在的地址中都包含了这个变量的数据类型、值和id地址,所以python的代码执行效率会比较慢,因为一个数据所携带的东西太多了
静态类型语言
- C是静态类型语言,也就是说在定义变量的时候需要对这个变量进行声明,而这样就使得这个变量的地址所携带的东西会变少,也就使得C的执行效率会变高
2:数组和列表
列表
- 在python中的列表具有很高的包容性,,我们可以在列表中存储各种各样的数据,包括列表,元组和字典
- 列表中各个元素的数据类型可以不同
数组
- 在数组中所有元素的数据类型都要相等,当中整形的优先级最低,其次为浮点数,最后为字符
- 整形 < 浮点型 < 字符型
数组对于列表的优势
- 由于在数组中所有的数据类型都是一样的所以,数组的运算效率相对于列表来说是快得多
- 通过效率对比可以发现,数组处理数据的效率要远远高于列表的
3:Numpy入门
3.1:Numpy的基础使用
导包操作
- 在Numpy中导入Numpy有一个不成文的规定,对于导入Numpy库有一个固定的写法为
import numpy as np
产看Numpy包的版本
3.2:使用Numpy创建一维数组
- 创建数组的方式包括一维数组、二维数组和三维数组,更高维度的数组以现在的需求没有必要学习
创建一维数组
import numpy as np
np.array([1, 2, 3, 4, 5])
np.array((1, 2, 3, 4, 5, ))
- 使用字符串创建数组,需要注意的是,每一个字符串属于是数组中的一个数据,而不是一个字符串中的每一个数字或字母是一个元素
产看数组的类型和数组中数据的类型
- 产看数组的类型:因为数组和列表长的太相似了,所以才会有这个这个方法来分辨数组和列表
a2 = np.array([1, 2, 3, 4, 5])
a2.dtype
- 产看数组中数据的数据类型:由于数组中的所有数据的数据类型都是一样的所以需要有一个方法来知道数组中数据的类型,方便做其它的操作
type(a2)
快速创建一维数组
- 所谓的快速,也就是使用一些代码来创建一个数据非常多的数组,的快捷方式
- 方法一:先转化为列表或者元组在转换为元组
L = list(range(10))
a3 = np.array(L)
a4 = np.arange(10) # 直接转换
a5 = np.arange(0, 10, 2) # 范围转换
a4, a5
创建多个0和1
- 创建n个0的数组:第一个参数表示要创建多少个元素,dtype参数表示,要创建元素的数据类型,默认为浮点型
- 创建多个0
a6 = np.zeros(10, dtype=int)
a7 = np.ones(10, dtype=float)
3.3:使用numpy创建多维数组
- 这里说的多维数组只包括二维和三维数组,多的数组现在学习没有什么必要
创建二维数组
L1 = [[123, 456, 789], [abc, def, ght]]
a8 = np.array(L1)
创建三维数组
n3 = np.array([
[
[1,2,3],
[4,5,6]
],
[
[7,8,9],
[10,11,12]
]
])
数组的属性
n10
n10.ndim
- 查看数组的形状,也就是这个数组是这个数组的行和列,二维的数组返回的是行和列
n10.shanp
- 三维数组,第一个数字为有几个元素,二三参数表示每个元素的行和列
a10.shape # 共有2个元素,每个元素都是两行三列
len(a9)
- 返回元素的个数,这个表示的是,一共有多少个元素,代表的是所有的数组
a9.size
3.4:修改数组的维度
一维到二维
- 使用的是一个方法:
reshape - 需要注意的是:元素的个数一定要和数组中的位置一致
n1 = np.array(range(12))
n2 = n1.reshape(3, 4)
print(n2)
一维到三维
- 方法是同一个方法,当这个方法为两个参数的时候,转换的是二维的数组,当这个方法为三个参数的时候为三维的数组
- 需要注意的是,对于一维转换为三维的数组中的三个参数分别标志,参数一:共有几个元素、参数二和参数三表示:每一个元素所占的行和列
n1 = np.array(range(12))
n2 = n1.reshape(3, 2, 2)
print(n2)
二维到一维
- 方法还是方法“reshape”,但是参数只有一个,而且这个参数一定要由小数点,因为这个参数的本质还是一个元组
n4 = n2.reshape(12,)
n4
三维到一维
- 方法还是方法“reshape”,但是参数只有一个,而且这个参数一定要由小数点,因为这个参数的本质还是一个元组
n5 = n3.reshape(12,)
n5
直接到一维
- 对于方法“reshape”还需要自己计算一下共有几个数据,然后在传入到一维数组中的参数中去,但是如果遇到数组的参数特别复杂的时候,就会不想计算了,基于这个美好的愿望,可以使用方法“flatten”、“ravel”,可以对高维的数组直接转换为一维
- flatten方法
- 对于这个方法,是拷贝了一份新的数组,然后对这个新的数组进行操作,不会对元数组造成影响
n7 = n3.flatten()
n7
# 改变数组中的数据,不会改变原数组
x.flatten()[1] = 100
x
- reval方法
- 这个方法是直接对原数组上进行操作,所以会对原数组造成影响
n8 = n3.ravel()
n8
# 改变数组中的数据,改变原数组
x.ravel()[1] = 100
x
3.5:数组的索引
一维数组的索引
- 和python中的列表取值一样,列表可以的操作,一维数组同样可以操作
- 一维数组的取值有单个取值、正取、反取、范围取值、跳转取值
二维数组的索引
- 二维数组的取值可以取整行、整列和单个值
数组的切片操作
- 连续切片
- 也就是说,是从二维数组中获取自己想要的一部分连续的数组
- 不连续的切片操作
- 可以随心所欲的从已有的二维数组中获取自己想要的数据,只要是获取的切片方法合适即可,有的时候可以有多个切片方法
3.6:数组的布尔操作
- 布尔操作的返回值只有True呵Flace,可以通过返回的值来获取数组中的数据
3.7:值得替换
- 单个替换,只是替换数组中的一个元素
- 多个值得替换,主要适用于替换一整行得数据
3.8:数组形状得改变
- 不改变原数组得方法:“reshape”,我们得老朋友了
- 改变原数组:“resize”
创建随机数组
- 要使用numpy中的ranint方法
|