python数据科学02-numpy数组基础操作
2021-08-08 本文已影响0人
小贝学生信
- 在某些方面,Numpy数组与Python内置的list列表类型非常相似,是Python数据科学的核心工具;
- numpy一维数组可以理解为向量,二维数组即是数据框(更准确来说,对应R里的matrix矩阵)....;
- numpy数组与python里的list列表最大的不同是前者需包含同一种数据类型才行,后者则没有此限制。
-
本文将学习numpy数组的一些基础操作:创建数组、取数组子集、数组维度变换、数组的合并与拆分
pip install numpy
ipython
#进入ipython环境
import numpy as np
1、创建数组
-
np.array()
:最直接的方式
#一维数组
x1 = np.array([1,2,3])
x1.shape
# (3,) 表示长度为3的一维向量
#二维数组
x2 = np.array([[1,3,5],[11,12,13]])
x2.shape
# (2,3) 表示两行三列的二维数组矩阵
1.1 固定取值
-
np.zeros(n, dtype=int)
创建长度为n,值全为0的整型的一维数组 -
np.ones((a,b), dtype=float)
创建a行b列,值全为1的浮点型的二维数组 -
np.full((a,b),x, dtype=int/float)
创建a行b列,值全为x的二维数组
np.full((3,3),1.11)
# array([[1.11, 1.11, 1.11],
# [1.11, 1.11, 1.11],
# [1.11, 1.11, 1.11]])
1.2 规律分布
-
np.arange()
等差数列
-
np.random.randint()
随机整数
-
np.random.random(10)
长度为10,符合0~1均匀分布的一维数组 -
np.random.normal(0, 1, c(2,3))
两行三列的,符合均值为0,标准差为1正态分布的二维数组
2、数组取子集
2.1 索引从0开始
参看下图
- 类似python的list取子集方式,numpy数组的索引也是从0开始;
-
负数的索引可以理解为倒数第n个值。
2.2 取单个值的子集
- 直接按坐标索引查看即可
2.3 切片[a:b:c]--左闭(包括)右开(不包括)加步长
- 对于长度为10的一维数组x1,
x1[0:5]
表示索引0到索引4的子集(不包括索引5),默认步长为1
; - a为0时,可省略;a,b均省略时,则表示全集;
- 步长为负数时,表示逆序取子集
- 对于二维数组,也是类似的取法。
x2[a:b,c:d]
x2[2,:]
:表示取第3行;x2[:,0]
:表示取第1列
2.3 列表(多个)索引值取子集
2.4 逻辑布尔值取子集
- AND:
&
、OR:|
、NOT:~
关于数组子集的联动性
-
若将一个数组的子集赋予给一个新对象,那么当这个新对象发生变化时,原始数组也会发生相应变化。如下图操作所示--
-
copy()
方法可创建不相关联的子集副本
3、数组维度变换
- 矩阵转置
T()
方法:行列转换
- 维度转换
reshaple()
方法:按照希望的可执行的维度结果转换
4、数组的合并与拆分
4.1 数组合并
-
concatenate()
可连接两个一维数组,或者按行/列合并两个二维数组。
-
vstack()
纵向合并两个数组,只要这两个数组的列数相同
-
hstack()
横向合并两个数组,只要这两个数组的行数相同
4.2 数组拆分
-
split()
拆分一维数组,参数的索引值指定分裂点的位置 -
当函数结果返回多个对象时,在等号前就要设置相应个数的对象名
-
vsplit()
:横向拆分一个二维数组(上下);同理hsplit()
:纵向拆分一个二维数组
数组拆分(左右)