一、 numpy 矩阵
numpy(Numerical python)是python语言的一个扩展程序库,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库
numpy : 计算模块; 主要有两种数据类型:数组、 矩阵
特点: 运算快
【】 + 【】
import numpy as np
1、numpy创建矩阵
mat1 = np.mat("1 2 3; 2 3 4; 1 2 3")
print(mat1)
print(type(mat1))
[[1 2 3]
[2 3 4]
[1 2 3]]
<class 'numpy.matrix'>
mat2 = np.mat("1 2;2 3;2 2")
print(mat2)
[[1 2]
[2 3]
[2 2]]
mat3 = np.mat("1 2 2; 2 2 4; 1 1 2")
print(mat3)
[[1 2 2]
[2 2 4]
[1 1 2]]
- 矩阵计算
print('矩阵加法运算:\n', mat1+mat3 )
矩阵加法运算:
[[2 4 5]
[4 5 8]
[2 3 5]]
print('矩阵乘法:\n', mat1*mat2)
矩阵乘法:
[[11 14]
[16 21]
[11 14]]
print('矩阵转置:\n', mat1.T)
矩阵转置:
[[1 2 1]
[2 3 2]
[3 4 3]]
mat4 = np.mat("1 0 0; 0 4 0; 0 0 6")
print('逆矩阵:\n', mat4.I)
逆矩阵:
[[1. 0. 0. ]
[0. 0.25 0. ]
[0. 0. 0.16666667]]
print('矩阵数乘:\n', 4 * mat4)
矩阵数乘:
[[ 4 0 0]
[ 0 16 0]
[ 0 0 24]]
print('对应元素相乘的运算:\n', np.multiply(mat1, mat3))
对应元素相乘的运算:
[[ 1 4 6]
[ 4 6 16]
[ 1 2 6]]
二、矩阵属性
print('矩阵的结构:\n', mat1.shape)
矩阵的结构:
(3, 3)
print('矩阵的元素个数:\n', mat1.size)
矩阵的元素个数:
9
print('矩阵元素类型:\n', mat1.dtype)
矩阵元素类型:
int32
print('矩阵的维度:\n', mat1.ndim)
矩阵的维度:
2
三、数组的创建
数组的所有运算都是对应元素的运算;
- 数组的创建
#一维的数组
arr1 = np.array([1, 2, 3, 4])
print(arr1)
print(type(arr1))
[1 2 3 4]
<class 'numpy.ndarray'>
#二维的数组:
arr2 = np.array([[1, 2, 3],[0, 1, 2],[2, 3, 1]])
print(arr2)
[[1 2 3]
[0 1 2]
[2 3 1]]
#列向量类型的数组:
arr3 = np.array([[1], [2],[3],[4]])
print(arr3)
[[1]
[2]
[3]
[4]]
- 数组的属性
print('一维数组结构:\n', arr1.shape)
print('二维数组结构:\n', arr2.shape)
一维数组结构:
(4,)
二维数组结构:
(3, 3)
print('一维数组的元素个数:\n', arr1.size)
print('二维数组的元素个数:\n', arr2.size)
数组的元素个数:
4
数组的元素个数:
9
print('一维数组元素的类型:\n', arr1.dtype)
print('二维数组元素类型:\n', arr1.dtype)
元素的类型:
int32
二维元素类型:
int32
print('一维数组的维度:\n', arr1.ndim)
print('二维数组的维度:\n', arr2.ndim)
一维数组的维度:
1
二维数组的维度:
2
3.数组的索引
# (1)一维数组的索引:
arr1[::-1]
array([4, 3, 2, 1])
# (2)二维数组的切片
print(arr2)
# arr2[行切片, 列切片]
arr2[1, 2]
arr2[:2, 0:2]
[[1 2 3]
[0 1 2]
[2 3 1]]
array([[1, 2],
[0, 1]])
# (3)不同行不同列的切片
arr2[(0,1,2),(0,1,2)]
array([1, 1, 1])
arr2[(1,0,1),(0,1,2)]
array([0, 2, 2])
arr2
array([[1, 2, 3],
[0, 1, 2],
[2, 3, 1]])
#(5)bool取值# : 不要行列同时传入bool值,只在行的位置或列的位置传入即可;
mask = np.array([1, 0, 1], dtype=np.bool )
print(mask)
[ True False True]
arr2[mask, :2]
array([[1, 2],
[2, 3]])
arr2[:2, mask]
array([[1, 3],
[0, 2]])
arr2[mask, mask]
array([1, 1])
#练习
arr5 = np.array([1, 6, 3, 4, 5])
mask = np.array([0,1,0,1,1], dtype=np.bool)
arr5[mask]
array([6, 4, 5])