1.创建
1.1 一维列表创建
vector = np.array([5, 10, 15, 20])
1.2 多维列表创建
matrix = np.array([[5, 10, 15], [20, 25, 30], [35, 40, 45]])
1.3快速创建对象
np.full([3,4],1) #3*4 值为1的矩阵
np.full([3,4],True) #3*4 值为True的矩阵
np.zeros ((3,4))#3*4 值为0的矩阵
np.ones( (2,3,4))#3*4 值为1的矩阵
np.arange( 10, 30, 5 )# 起始为10,5为步长,30为结尾取不到
np.arange(12).reshape(4,3) #0-12,步长为12,4*3多维的矩阵
np.random.random((2,3)) #随机矩阵:random.random 后面的 (2,3) 表示要得到一个2行3列的矩阵,默认会产生 -1 到 +1 的随机值。
1.4 平均划分
# 把从0-2Π的值平均分为100份
from numpy import pi
np.linspace( 0, 2*pi, 100 )
2.索引和切片
2.1 获取指定行列的数据
data[1,2] #第二行第三列的数据
2.2 多行多列
data[0:3] #0-3行
data[,0:1] #0-1列
data[0:3,[0,1]] #0-3行的前两列(矩阵)
data[[0,1],[2,3]]#0行1列的数据和2行3列的数据
2.3 bool索引
vector = np.array([5, 10, 15, 20 ,10])
vector == 10
#返回array([False, True, False, False, True])
equal_to_ten = (vector == 10)
#返回array([False, True, False, False, True])
vector[equal_to_ten]
#返回array([10, 10])
2.4 多个条件判断
vector = np.array([5, 10, 15, 20 ,10])
res = (vector == 10) |(vector == 20)
#返回array([False, True, False, True, True])
vector[res]
#返回array([10, 20, 10])
3.常见操作
3.1 获取类型,类型转换
vector.dtype
vector.astype('float')
3.2 求和
matrix.sum() # 所有元素求和
matrix.sum(axis=1) #axis=1是按照行求和,0是按列求和
3.3求指数
np.exp(matrix)
3.4开方
np.sqrt(matrix)
3.5多维变1维
matrix.ravel()
3.6 矩阵的扩展
a = np.arange(0, 40, 10)
b = np.tile(a, (3, 5)) # 行变成3倍,列变成5倍
输出
a=array([ 0, 10, 20, 30])
b=array([[ 0, 10, 20, 30, 0, 10, 20, 30, 0, 10, 20, 30, 0, 10, 20, 30,
0, 10, 20, 30],
[ 0, 10, 20, 30, 0, 10, 20, 30, 0, 10, 20, 30, 0, 10, 20, 30,
0, 10, 20, 30],
[ 0, 10, 20, 30, 0, 10, 20, 30, 0, 10, 20, 30, 0, 10, 20, 30,
0, 10, 20, 30]])
3.7 矩阵的拼接
- 水平拼接
a = np.floor(10*np.random.random((2,3))) #floor向下取整
b = np.floor(10*np.random.random((2,3)))
c=np.hstack((a,b))
输出:
a = array([[0., 5., 6.],
[0., 2., 5.]])
b = array([[0., 1., 0.],
[4., 0., 8.]])
c = array([[0., 5., 6., 0., 1., 0.],
[0., 2., 5., 4., 0., 8.]])
- 垂直拼接
d = np.vstack((a,b))
输出:
d = array([[0., 5., 6.],
[0., 2., 5.],
[0., 1., 0.],
[4., 0., 8.]])
3.8 矩阵的切割
- 水平切割
a = np.floor(10*np.random.random((8,2)))
b=np.vsplit(a,2)
输出:
a = array([[2., 8.],
[8., 9.],
[2., 0.],
[9., 7.],
[5., 5.],
[1., 0.],
[0., 0.],
[3., 2.]])
b = [array([[2., 8.],
[8., 9.],
[2., 0.],
[9., 7.]]),
array([[5., 5.],
[1., 0.],
[0., 0.],
[3., 2.]])]
- 垂直切割
a = np.floor(10*np.random.random((2,12)))
c=np.hsplit(a,3)
输出:
a =array([[0., 4., 4., 1., 6., 6., 8., 4., 1., 3., 7., 0.],
[4., 2., 7., 4., 5., 9., 8., 2., 4., 2., 7., 8.]])
c = [array([[0., 4., 4., 1.],
[4., 2., 7., 4.]]),
array([[6., 6., 8., 4.],
[5., 9., 8., 2.]]),
array([[1., 3., 7., 0.],
[4., 2., 7., 8.]])]