1. 创建数组
numpy
的主要对象是多维数组ndarray
,通常使用np.array
创建数组。
#创建一维数组
np.array([1,2,3])
#通过list创建二维数组
np.array([(1,2,3),(4,5,6)])
#创建全为0的三维数组
np.zeros((3,3))
#创建全为 1 的三维数组
np.ones((2,3,4))
#创建一维等差数组
np.arange(5) #内置为range()
# 创建二维等差数组
np.arange(6).reshape(2,3) #创建多维数组
# 创建单位矩阵(二维数组)
np.eye(3)
# 创建等间隔一维数组
np.linspace(1, 10, num=6)
# 创建二维随机数组
np.random.rand(2,3)
# 创建二维随机整数数组(数值小于 5)
np.random.randint(5, size=(2,3))
数组属性
a.shape
a.size
a.dtype
2. 数组运算
A=np.array([[4,3],[2,1]])
B=np.array([[5,6],[7,8]])
# 矩阵加法运算
A+B 、np.add(a,b)
# 矩阵元素间乘法运算
A * B
# 矩阵乘法运算
np.dot(A,B)
# 如果使用 np.mat 将二维数组准确定义为矩阵,就可以直接使用 * 完成矩阵乘法计算
np.mat(A)*np.mat(B)
# 矩阵的转置
A.T
# 矩阵求逆
np.linalg.inv(A)
# 数组的方根的运算(开平方)
np.sqrt(A)
# 数组的方根的运算(立方)
np.power(A, 3)
3. 数组的展平、变维、分割与合并
a = np.arange(12)
# 数据变维
b = a.reshape(2,6) # 原数组的仍保留其原有的维度
a.resize((4,3)) # 对原数组的变维
# 展平
a = np.arange(8).reshape(2,4)
a.ravel()
a.flatten() #以上是两种方法对多维数组进行展平,结果只能是一维数组
# 合并
a =([[0, 1, 2], [3, 4, 5]])
b =([[0, 2, 4], [6, 8, 10]])
# 1. 水平合并
np.hstack((a,b)) # 或np.column_stack((a,b)) 或np.concatenate((a,b),axis=1)
# 2. 垂直合并
np.vstack((a,b)) # np.row_stack((a,b))、np.concatenate((a,b),axis=0)
# 上面的合并是把数组简单的累计放在一起,也就是按照顺序将后一个数组排放在前一个数组后,numpy中还提供了深度合并
np.dstack((a,b))
# 3. 分割
# 3.1 水平分割
c = np.arange(9).reshape(3,3)
np.hsplit(c,3) # 调用 split 函数并在参数中指定参数 axis=1 ,即split(a, 3, axis=1),同样可达到以上效果
# 3.2 垂直分割
np.vsplit(c,3)
split(a, 3, axis=0)
4. 索引、切片
4.1 索引
a = np.array([1, 2, 3, 4, 5])
a[0], a[-1] #输出第一个数和最后一个数
np.argmax(a,axis=0) #返回每列最大值索引
a = np.array([(1,2,3),(4,5,6),(7,8,9)])
a[0], a[-1] #输出第一行和最后一行
4.2 切片
a = np.array([1, 2, 3, 4, 5])
a[0:2], a[:-1]
a[1:3, :] # 二维数组切片(取第 2,3 行)
5. 数组统计
a = np.array(([1,4,3],[6,2,9],[4,7,2]))
np.median(a, axis=0) # 统计数组各列的中位数
np.mean(a, axis=1) # 统计数组各行的算术平均值
np.average(a, axis=0) # 统计数组各列的加权平均值
np.var(a, axis=1) #统计数组各行的方差
np.std(a, axis=0) # 统计数组各列的标准偏差
np.argmax() # 求最大值的出现位置
np.argmin() #求最小值的出现位置
6. 排序
np.sort() # 排序
argsort()函数是numpy库中的函数,返回的是数组值从小到大的索引值。
import numpy as np
x= np.array([3,5,1,0])
x.argsort()
# array([3, 2, 0, 1], dtype=int64)
解析:
在 [3,5,1,0]中 ,"3"的索引是0,"5"的索引是1,"1"的索引是2,"0"的索引是3,[3,5,1,0]从小到大排序为0,1,3,5 即对应的索引为 3, 2, 0, 1。
注:argsort函数返回的是:数组值从小到大的“索引值”。
7. tile方法
Numpy的 tile() 函数,就是将原矩阵横向、纵向地复制。tile 是瓷砖的意思,顾名思义,这个函数就是把数组像瓷砖一样铺展开来。
原型:numpy.tile(A,reps)
tile共有2个参数,A指待输入数组,reps则决定A重复的次数。整个函数用于重复数组A来构建新的数组。
举个例子,原矩阵:
mat = array([[1,2], [3, 4]])
横向:
tile(mat, (1, 4))
等同于 tile(mat, 4)
import numpy as np
mat= np.array([[1,2],[3,4]])
a = np.tile(mat,4)
b = np.tile(mat,(1,4))
print(a,b)
结果:
[[1 2 1 2 1 2 1 2]
[3 4 3 4 3 4 3 4]]
纵向:
tile(mat, (3, 1))
结果:
[[1 2]
[3 4]
[1 2]
[3 4]
[1 2]
[3 4]]
横向 + 纵向
tile(mat, (3, 4))
结果:
[[1 2 1 2 1 2 1 2]
[3 4 3 4 3 4 3 4]
[1 2 1 2 1 2 1 2]
[3 4 3 4 3 4 3 4]
[1 2 1 2 1 2 1 2]
[3 4 3 4 3 4 3 4]]