linalg文档笔记 & 利用linalg进行计算加速

官方文档

scipy.linalg官方文档
numpy.linalg官方文档
scipy.linalg 案例
scipy.linalg官方文档功能多于numpy.linalg官方文档,除非不想依赖scipy包则一般使用scipy.linalg

功能介绍

这里是来自numpy.linalg的基础功能

1. Matrix and vector products

矩阵(向量)之间的成绩,包括矩阵 乘积、(高维)內积、(高维)外积、沿着特定维度的乘积求和、矩阵的幂运算、克罗内克积、高纬度矩阵看作矩阵的叠加

PS

np.dot(A, B) 矩阵乘积
np.multiply(A, B)或者A*B 矩阵对应元素相乘

一个行向量乘以一个列向量称作向量的内积,又叫作点积,结果是一个数;
一个列向量乘以一个行向量称作向量的外积,外积是一种特殊的克罗内克积,结果是一个矩阵
求解矩阵的內积和外积,可以先向量化矩阵,即将一个行或者一列向量看作是一个元素
CSDN-矩阵的內积和外积
numpy.inner
案例

numpy.matmul

  • 2个矩阵都是2-D矩阵,等价于普通矩阵乘法
  • 2个矩阵都是n-D矩阵,n>2,那么最后两个维度表示矩阵大小,前面是矩阵的堆叠方式
>> a = np.arange(2 * 2 * 4).reshape((2, 2, 4))
>> b = np.arange(2 * 2 * 4).reshape((2, 4, 2))
>> np.matmul(a,b).shape
(2, 2, 2)
  • 某一个矩阵时1-D向量,另一个是n-D矩阵,将1-D向量维度前面添加1变成矩阵

2. Decompositions

Cholesky分解、QR分解、SVD分解

3. Matrix eigenvalues

计算特征值与特征向量

特征值(eigenvalue)即方程 Ax = ax 的根,是一个标量。其中,A 是一个二维矩阵,x 是一个一维向量。特征向量(eigenvector)是关于特征值的向量

4. Norms and other numbers

矩阵/向量的范数、行列式、矩阵的秩、矩阵对角线之和等

PS

numpy.linalg.cond(x, p=None)
根据p值不同可以计算1范数、2范数、无穷范数、最小奇异值、Frobenius范数
numpy.linalg.slogdet(a)
列式的正负*行列式绝对值的自然对数。
鉴于有些特征值无法求解,但这个这里可以求出。

5. Solving equations and inverting matrices

求解线性矩阵方程的解、矩阵的逆、矩阵的伪逆、矩阵的倒数、线性矩阵方程的最小二乘解

计算加速

这里指的加速,是利用矩阵代替逐行运算,发挥矩阵运算的高效
在做pandas.dataframe的相关计算的时候,可以试图将pandas.dataframe.values其转化为矩阵计算

def dist(row):
    return ( (row['x_1'] - row['x_0'])**2 +
             (row['y_1'] - row['y_0'])**2 +
             (row['z_1'] - row['z_0'])**2 ) ** 0.5

train['dist'] = train.apply(lambda x: dist(x), axis=1)
test['dist'] = test.apply(lambda x: dist(x), axis=1)

加速

train_p_0 = train[['x_0', 'y_0', 'z_0']].values
train_p_1 = train[['x_1', 'y_1', 'z_1']].values
test_p_0 = test[['x_0', 'y_0', 'z_0']].values
test_p_1 = test[['x_1', 'y_1', 'z_1']].values

train['dist_speedup'] = np.linalg.norm(train_p_0 - train_p_1, axis=1)
test['dist_speedup'] = np.linalg.norm(test_p_0 - test_p_1, axis=1)

7min 21s—>1.4s

仔细想想可能用的比较多的会是矩阵的点乘、矩阵的范数、矩阵的幂运算,这些都很方便将一些重复计算转换成矩阵计算

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值