NumPy模块提供了数组,方便进行数据的计算,运算效率比列表的高。
目录
创建数组
提取元素
常用操作
添加
删除
去重
补充缺失
运算
四则运算
统计
补充
查看数组信息
重塑
转置
拆分数组
拼接
创建数组
简单创建:array()
import numpy as np
# 创建一维数组
# 数组中元素用空格分开
a = np.array([1,2,3,4])
# 创建二维数组
b = np.array([[1,2], [3,4]])
等差创建:arrange()
import numpy as np
# 创建 起始为1, 步长为2,结束值<=20 的等差数列
# 不指定则默认 步长为1
a = np.arrange(1, 20, 2)
随机创建:rand()完全随机、randn()符合正态分布、randint()指定随机的范围
import numpy as np
# 随机创建一个有3个元素的一维数组,每个元素的值在[0,1)
a = np.random.rand(3)
# 随机创建一个3行2列的二维数组
b = np.random.rand(3, 2)
# 随机的元素符合正态分布
# 若不指定行数,则同rand(),默认是一个一维的数组
c = np.random.randn(3)
# 指定随机数的范围
# 指定在[1,10)区间中随机生成5个数
# 若不指定行数,则同rand(),默认是一个一维的数组
d = np.random.randint(1, 10, 5)
提取元素
- 直接使用索引,注意python中索引可为负数代表倒数第几个
- 切片
import numpy as np
a = np.array([[1,2],[3,4],[5,6]]) # 一个三行两列的三维数组
b = np.array([1,2,3,4,5,6]) # 一行四列的一维数组
# 取单个元素
print(b[0])
print(a[0,1]) #取第一行第二个元素
#切片取一段元素
print(b[0:5]) #取数组b的0至4号
print(b[0:5:2]) #取数组b的0,2,4号
print(b[5:0:-2]) #倒着取5,3,1号
print(a[0]) # 取第一行
print(a[:,1]) # 取第二列
print(a[0:2]) # 取第一行到第三行
print(a[:2]) # 取第三行前的所有行
print(a[1:]) # 取第二行后的所有行,包括最后一行
print(a[:, 1:2]) # 取所有行的第二到第三列,不包括第三列
print(a[0:1, 1:2]) # 取第一行至第二行的第二列到第三列
常用操作
添加
- append(),在数组尾部添加
- insert(),在数组指定位置添加
若不通过axis控制添加的方向,默认添加后改为一维数组
import numpy as np
a = np.array([1,2],[3,4])
a1 = np.append(a, [[5,6]]) # 整个变为一维
a2 = np.append(a, [[5,6]], axis=0) # 指定在行方向上添加,得到三行二列
a3 = np.append(a, [[5,6],[7,8]], axis=1) # 指定在列方向上添加,得到二行四列
b1 = np.insert(a, 1, [[5,6]]) # 在一维数组的索引1位置插入
b2 = np.insert(a, 1, [[5,6]], axis=0) # 添加到索引1行即第二行
b3 = np.insert(a, 1, [[5,6]], axis=1) # 添加到第二列,得到二行三列
删除
delete(),若不通过axis声明删除的行/列,则把多维数组展开为一维数组(可理解为用连续空间数组存矩阵),删除指定的索引
import numpy as np
a = np.array([[1,2,3],[4,5,6]])
a1 = np.delete(a,2) # 展开为一维,删除索引2,即删除3
a2 = np.delete(a, 2, axis=0) # 指定删除第三行
a3 = np.delete(a, 2, axis=1) # 指定删除第三列
去重
unique(),删除重复元素后,元素由小至大排列。
import numpy as np
a = np.array([9,2,2,3,3,4,5,6,7,8])
a1 = np.unique(a) #去重并从小到大排列
a1, a2 = np.unique(a, return_counts=True) # 去重后的a1中每个元素在元素组a中出现的次数
补充缺失
isnan()定位数组中的缺失值,直接修改索引填充缺失
import numpy as np
a = [1,2,3,np.nan,5] # np.nan为定义的缺失
print(np.isnan(a)) # 返回查找信息,有值的位置返回true,缺失返回false
a[np.isnan(a)] = 0 # 指定缺失位置的索引,修改缺失值
运算
四则运算
四则运算,即每个对应位置上的元素进行四则运算
import numpy as np
a = np.array([[1,2,3],[4,5,6],[7,8,9]])
b = np.array([[9,8,7],[6,5,4],[3,2,1]])
c = a+b #每个对应位置上的元素相加
d = a*b #对应位置相乘
e = a+5 # 每个位置的元素+5
f = a*10 # 每个位置的元素*10
统计
求和sum(),求平均值mean(),求最值max()与min()。均默认对整个数组进行统计,也可用axis参数控制对 行/列 数据进行统计
import numpy as np
a = np.array([[1,2,3],[4,5,6],[7,8,9]])
total = a.sum() # 整个数组求和
total_row = a.sum(axis=0) # 每列求和
total_line = a.sum(axis=1) # 每行求和
avg = a.average() # 整个数组求均值
avg_row = a.sum(axis=0) # 每列求均值
avg_line = a.sum(axis=1) # 每行求均值
maxnum = a.max() # 整个数组求最大
max_row = a.max(axis=0) # 每列求最大
max_line = a.max(axis=1) # 每行求最大
补充
查看数组信息
打印行列数shape、元素个数size、数据类型dtype、转换数据类型astype、查看维数ndim
import numpy as np
# 一个三行两列的数组
a = np.array([[1,2],[3,4],[5,6]])
print(a.shape) # 元组返回行数和列数
print(a.size) # 返回数组元素个数
print(a.dtype) # 返回数组中元素的数据类型
b=a.astype(float) #转换数组的数据类型为float
print(a.ndim) # 返回数组的维数,可理解为返回列数
重塑
通过reshape()函数,把原来的数组在不改变个数和内容的情况下变成多行多列的数组
import numpy as np
a = np.array([[1,2,3],[4,5,6]]) # 创建的二行三列
b = a.reshape(1,6) # 转为一行六列
c = a.reshape(3,2) # 转为三行两列
转置
数组可以理解为矩阵,这里的转置即矩阵的转置:把原来的列变成行,把行变成列。
- 直接调用T属性
- 使用transpose()函数
import numpy as np
a = np.array([[1,2,3],[4,5,6],[7,8,9])
print(a.T) # 使用T属性转置
print("------")
b = np.transpose(a) #使用transpose()转置
print(b)
拆分数组
分割成多个数组
- split()指定平均分为多少个数组,按指定索引拆分
- hsplit()横向拆分
- vsplit()纵向拆分
import numpy as np
a = np.array([1,2,3,4,5,6,7,8])
a1 = np.split(a, 2) # 数组A均分为两组,[array([1,2,3,4]),array([5,6,7,8])]
a2 = np.split(a, [2,7]) # 在索引2~4的位置前进行拆分,分为三组
b = np.array([[1,1,1,1],[2,2,2,2],[3,3,3,3],[4,4,4,4]])
b1 = np.hsplit(b, 2) # 横向拆为2组
b2 = np.vsplit(b, 2) # 纵向拆为2组
拼接
数组的拼接同矩阵的拼接,只能和同一维度的数组进行拼接,多维数组的拼接必须行列数一样。
- concatenate()合并矩阵,axis参数指定在行/列的方向上拼接
- hstack(),同行方向上的concatenate
- vstack(),同列方向上的concatenate
import numpy as np
a = np.array([1,2],[3,4])
b = np.array([5,6],7,8)
c = np.concatentate((a,b), axis=0) # 列方向上拼接,放在矩阵的下边
d = np.concatentate((a,b), axis=1) # 行方向上拼接,放在矩阵的右边
e = np.hstack((a,b)) # 水平堆叠,同行方向拼接
f = np.vstack((a,b)) # 垂直堆叠,同列方向拼接