numpy矩阵计算

numpy矩阵的计算
本文是课程笔记,课程来源:【莫烦Python】Numpy & Pandas (数据处理教程)

  • numpy矩阵基本使用
  • numpy矩阵计算
  • numpy矩阵索引
  • numpy矩阵合并
  • numpy矩阵分割
import numpy as np

# 此部分为numpy计算

arr_a = np.array([10, 20, 30, 40])
arr_b = np.array([1, 2, 3, 4])
# 矩阵加减运算,注意运算矩阵的维度必须一致
print('arr_a + arr_b=', arr_a + arr_b)
print('arr_a - arr_b=', arr_a - arr_b)

# 求矩阵的sin值,会求出矩阵所有元素的sin值
print('sin(arr_a)=', np.sin(arr_a))

# 求矩阵满足条件的布尔值
print('arr_a>b=', arr_b > 3)
print('arr_a==b=', arr_b == 3)

# 矩阵的乘法
arr_a2d = np.array([[1, 2],
                    [3, 4]])
arr_b2d = np.array([[6, 6],
                    [5, 5]])
# 矩阵的点乘--矩阵直接相乘
print('a*b=\n', arr_a2d * arr_b2d)
# 矩阵的叉乘--np.dot
print('np.dot(a,b)=\n', np.dot(arr_a2d, arr_b2d))
# 叉乘也可以a.dot(b)
print('a.dot(b)=\n', arr_a2d.dot(arr_b2d))

# 矩阵求和
print('sum=', np.sum(arr_a))
# 维度求和,axis=0时求第1维度,对应二维矩阵的列数求和,axis=1,求第2维度,对应二维矩阵的行数求和
# 个人推测axis递增对应维度递减
print('dim=', arr_a2d.ndim)
print('维度和=', np.sum(arr_a2d, axis=0))

# 矩阵最值
print('min=', np.min(arr_a))
print('max=', np.max(arr_a))

# 获取最值索引
print('min index=', np.argmin(arr_a))
print('max index=', np.argmax(arr_a))

# 矩阵平均值
print('np.mean(a)=', np.mean(arr_a))
print('a.mean()=', arr_a.mean())
# average也可以求平均值,arr_a.average()不可用
print('np.average(a)=', np.average(arr_a))
# 按维度取平均值
# 三维的时候axis=0,此时的结果中的值计算方式为(99+6)/2=52.5;(4+5)/2=4.5;..以此类推,
# 假设矩阵是n维,根据dim=n-1-axis对矩阵进行划分,例如一下dim=3-1-0=2,把每一个2维度矩阵拿出来,将每一个二维矩阵对应的下标val相加除以count,即为平均值矩阵的每一个值
print('三维矩阵axis=0\n', np.mean(np.array([[[6, 4, 8, 1, 9],
                                       [4, 55, 1, -1, 2]],
                                      [[99, 5, -64, 0, 9],
                                       [125, 1, 6, 4, -1]]]), axis=0))
print('四维矩阵axis=0\n', np.mean(np.array([[[[6, 4, 8, 1, 9],
                                        [4, 55, 1, -1, 2]],
                                       [[99, 5, -64, 0, 9],
                                        [125, 1, 6, 4, -1]]],
                                      [[[6, 4, 8, 1, 9],
                                        [4, 55, 1, -1, 2]],
                                       [[99, 5, -64, 0, 9],
                                        [125, 1, 6, 4, -1]]]]), axis=0))

# 矩阵中位数
print('np.median(a)=', np.median(arr_a))

# 矩阵前缀和,例如[10,20,30,40],前缀和为[10,10+20,10+20+30,10+20+30+40],高维度矩阵根据矩阵维度的index高低递增
print('np.cumsum(a)=', np.cumsum(arr_a))

# 矩阵差分,diff(arr,n),n决定差分阶数
print('一阶差分np.diff(a)=', np.diff(arr_a, 1))

# 矩阵的非0Index
print(np.nonzero(np.array([0, 20, 0, 40])))

# 矩阵排序,sort是根据维度最低维度进行单维度映射递增排序
print(np.sort(np.array([[[6, 4, 8, 1, 9],
                         [4, 55, 1, -1, 2]],
                        [[99, 5, -64, 0, 9],
                         [125, 1, 6, 4, -1]]])))

# 矩阵的转置,转置本质是对象在超平面中的映射根据维度交换
print('a^T=\n', np.transpose(arr_a2d))
print('a.T=\n', arr_a2d.T)
print('三维矩阵转置=\n', np.array([[[6, 4, 8, 1, 9],
                              [4, 55, 1, -1, 2]],
                             [[99, 5, -64, 0, 9],
                              [125, 1, 6, 4, -1]]]).T)

# 矩阵的过滤,np.clip(array,min,max)会将array中所有小于min的数值设定为min,所有大于max的数值设定为max
print(np.clip(arr_a, 20, 40))

你可能感兴趣的:(numpy,矩阵,python,线性代数,数据挖掘,机器学习)