石嘴山网站定制开发建设,软件技术专升本需要考什么,哈尔滨网站制作推广,怎样做加入购物车的网站文章首发于#xff1a;My Blog 欢迎大佬们前来逛逛
1. NumPy矩阵
1.1 mat函数
matasmatrix
asmatrix(data, dtypeNone):data#xff1a;表示输入的数组或者字符串#xff0c;使用‘#xff0c;’分割列#xff0c;使用‘#xff1b;’分割行
创建两个普通的矩阵…文章首发于My Blog 欢迎大佬们前来逛逛
1. NumPy矩阵
1.1 mat函数
matasmatrix
asmatrix(data, dtypeNone):data表示输入的数组或者字符串使用‘’分割列使用‘’分割行
创建两个普通的矩阵
print(np.mat([1, 2, 3]))
print(np.mat(1,2,3;4,5,6;7,8,9))
--------
[[1 2 3]]
[[1 2 3][4 5 6][7 8 9]]需要注意mat创建的矩阵是不会产生副本的即共享内存
a1 np.array([1, 2, 3, 4, 5])
ma1 np.mat(a1)
ma1[0, 0] 100
print(ma1)
print(a1) # a1[0,0]也会改变
---------
[1 2 3 4 5]
[[100 2 3 4 5]]
[100 2 3 4 5]1.2 matrix函数
matrix也是创建矩阵的 matrix(data, dtypeNone, copyTrue)data数组或者字符串与mat一样
copy表示创建的矩阵与原数组data是不是拷贝的如果是拷贝的则不共享内存否则共享内存
注意到mat默认共享内存matrix可以选择拷贝他们的不同仅此而已
print(np.matrix([1, 2, 3, 4, 5]))
print(np.matrix(1,2,3;4,5,6))
a1 np.array([1, 2, 3, 4, 5])
ma1 np.matrix(a1, copyTrue)
ma1[0, 0] 100
print(a1) # 不变
----------
[[1 2 3 4 5]]
[[1 2 3][4 5 6]]
[1 2 3 4 5]1.3 bmat函数
bmat可以产生一个分块矩阵
bmat(obj, ldictNone, gdictNone)obj数组或者字符串
ldictgdict字典
a1 np.arange(4).reshape(2, 2)
a2 np.arange(5, 9).reshape(2, 2)
print(a1)
print(a2)
print(np.bmat([a1, a2]))
print(np.bmat(a1,a2;a2,a1)) # 四块 2*2 矩阵合并成一个大的4*4的矩阵
---------
[[0 1][2 3]]
[[5 6][7 8]]
[[0 1 5 6][2 3 7 8]][[0 1 5 6][2 3 7 8][5 6 0 1][7 8 2 3]]1.4 矩阵运算
我们所熟知的运算NumPy矩阵运算都可以实现
print(a1 a2)
print(a1 - a2)
print(a1 * a2) # 注意只能是满足矩阵运算条件 即 m*n 的m的列数要等与n的行数结果为m的行数*n的列数
print(a1 / a2)
print(a1 ** a2)
---------
[[ 5 7][ 9 11]]
[[-5 -5][-5 -5]]
[[ 0 6][14 24]]
[[0. 0.16666667][0.28571429 0.375 ]]
[[ 0 1][ 128 6561]]矩阵的特有属性
T转置H共轭转置I逆矩阵A转换为二维数组
a2 np.matrix(1,2,3;4,5,6;7,8,9)
print(a2.T) # 求转置
print(a2.H) # 共轭转置
print(a2.I) # 逆矩阵
print(a2.A) # 自身的二维数组2. NumPy通用函数
2.1 ufunc运算函数
注意ufunc的运算操作是对于数组的运算而不是矩阵矩阵的运算是 NumPy 实现的。
ufunc的运算不是矩阵的运算因此对于不符合矩阵乘法条件的两个数组相乘是合法的。
np.all对于数组的元素需要全部满足
np.any对于数组的元素只需要存在即可
创建数组
a3 np.array([1, 2, 3])
a4 np.array([2, 3, 4])
print(a3 a4)
# ....
print(np.all(a3 2)) # a3全部元素大于2
print(np.any(a3 2)) # a3任意一个元素大于2
-------
[3 5 7]
False
True2.2 ufunc广播机制
对于数组的运算我们会对数组的shape有要求但是如果shape不一样我们仍然可以对他们进行运算操作只需要对他们使用广播机制即可。
广播机制必须满足的前提条件
两个数组必须具有相同的维数每个维的长度要么是相同的要么是1维数少的数组需要在其形状上加上n个长度为1的维数以便使得满足条件1.
例子1
a1数组是 2行4列的a2数组是 1行4列的。
我们可以发现a2数组的行数少 1因此需要在a2的shape上对其行数加1使得a2数组变为24那么他们的形状相同模拟为使得在B的末尾新添加一行与第一行相同的元素因此可以相加总结为
A.shape(2,4) B.shape(1,4) ---- B.shape(2,4)
然后再执行A与B相加。
a1 np.random.randint(0, 8, (2, 4))
a2 np.random.randint(0, 4, 4)
print(a1)
print(a2)
print(a1 a2)
-------
[[7 6 3 5][2 7 5 2]][1 3 0 2][[ 8 9 3 7][ 3 10 5 4]]例子2
此时我们的a1的shape是 4行3列a2的shape是 4行1列因此需要在a2的shape中对a2的列数加1直到他们的shape相同使得a2也变为 4行3列的模拟在a2的后面新添加两列与第一列相同的元素即可
A,shape(4,3) B.shape(4,1) ---- B.shape(4,3)
然后再执行相加。
a1 np.random.randint(0, 12, (4, 3))
a2 np.random.randint(0, 4, (4, 1))
print(a1)
print(a2)
print(a1 a2)
---------
[[ 0 6 6][11 1 3][ 4 10 6][11 1 4]][[3][1][2][3]][[ 3 9 9][12 2 4][ 6 12 8][14 4 7]]2.3 统计分析函数
2.3.1 排序函数
sort函数直接对对象数组进行升序排序
a1 np.random.randint(10, 20, 10)
a1.sort()
print(a1)
-----------
[11 11 12 12 13 15 16 16 18 19]使用 np.sort() 对数组排序后生成一份拷贝
a1 np.random.randint(10, 20, 10)
print(np.sort(a1))
print(a1)
--------
[10 10 11 12 13 13 13 15 15 18]
[13 12 15 13 13 11 10 18 15 10]argsort函数会产生索引数组其中索引表示的是按照升序排序后对应位置的元素在原数组中的对应的索引位置
例如新生成的索引数组的
[0] 8表示这个排序后的值[0]位置的值在原数组中是第8个下标0开始为10[1] 1表示为第1个为 11[2] 2表示为第2个为 11
…
a1 np.random.randint(10, 20, 10)
print(a1)
print(a1.argsort())
----------
[16 11 11 18 17 15 17 19 10 15]
[8 1 2 5 9 0 4 6 3 7]lexsort表示对多个键的数组进行间接排序也是返回一个索引数组。
2.3.2 去重与重复函数
unique函数的作用是去掉重复的元素。
a1 np.random.randint(10, 20, 10)
print(a1)
print(np.unique(a1))
---------
[15 13 18 14 15 15 12 17 18 16]
[12 13 14 15 16 17 18]unique可以指定参数
return_index是否返回唯一元素的索引return_inverse是否返回用索引重建的数组return_counts是否返回唯一数组中元素出现的次数
a1 np.random.randint(10, 20, 10)
print(a1)
print(np.unique(a1, return_indexTrue)) # 返回唯一元素的索引值
print(np.unique(a1, return_inverseTrue))# 使用唯一索引重建数组
print(np.unique(a1, return_countsTrue)) # 统计唯一数组的元素出现的次数
----------
[10 13 15 19 10 15 15 14 13 17]
(array([10, 13, 14, 15, 17, 19]), array([0, 1, 7, 2, 9, 3], dtypeint64))
(array([10, 13, 14, 15, 17, 19]), array([0, 1, 3, 5, 0, 3, 3, 2, 1, 4], dtypeint64))
(array([10, 13, 14, 15, 17, 19]), array([2, 2, 1, 3, 1, 1], dtypeint64))tile用于重复数组的值
tile(A, reps)A表示需要重复的数组
reps重复的次数
如下我们把5*2的数组重复了三次让他变成了 5 * 6的
a1 np.random.randint(10, 20, (5, 2))
print(np.tile(a1, 3))
--------
[[14 18 14 18 14 18][14 10 14 10 14 10][18 17 18 17 18 17][12 12 12 12 12 12][19 12 19 12 19 12]]repeat函数也是重复数组的值
repeat(a, repeats, axisNone)axis为0则表示垂直行数增加为1表示水平列数增加
print(np.repeat(a1, 3, axis1))
print(np.repeat(a1, 3, axis0))
----------
[[16 16 16 18 18 18][13 13 13 11 11 11][11 11 11 13 13 13][13 13 13 10 10 10][11 11 11 15 15 15]]
[[16 18][16 18][16 18][13 11][13 11][13 11][11 13][11 13][11 13][13 10][13 10][13 10][11 15][11 15][11 15]]2.3.3 常用统计函数
基本统计函数
min ,max amax, amin表示求得最大值和最小值ptp求最值差最大值与最小值之差percentile求分位数
表示数据波动函数 median求中位数 mean求算数平均值 average求加权平均值 var方差 std标准方差
数据分布密度函数
histogrambincout
数据相关性函数判断两个数组是否具有一定的一致性
cov协方差corrcoef协方差系数
求值函数
sum求数组所有元素之和cumsum求数组到某位置的累加和prod所有元素之积cumprod数组到某位置的累乘值