我是靠谱客的博主 冷艳爆米花,最近开发中收集的这篇文章主要介绍numpy基础学习大集合(二)前言Universal Function矩阵间的运算向量与矩阵之间的运算,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

前言

很明显这是接着(一)的续集,这是numpy的基础学习。上一篇主要说了numpy的创造和合并,以及numpy数组的合并和分解。主要是说比array.array差不多,但是array没有那么多复杂的功能。numpy.array 有这个。这里说的是矩阵一些通用功能

Universal Function

把数组当作矩阵或者向量进行计算叫做Universal Function。这里会把数组中所有的元素进行计算。

X=np.arange(1,16).reshape(3,5)
X
array([[ 1,
2,
3,
4,
5],
[ 6,
7,
8,
9, 10],
[11, 12, 13, 14, 15]])

除法

X/2
array([[ 0.5,
1. ,
1.5,
2. ,
2.5],
[ 3. ,
3.5,
4. ,
4.5,
5. ],
[ 5.5,
6. ,
6.5,
7. ,
7.5]])

取整除法

X//2
array([[0, 1, 1, 2, 2],
[3, 3, 4, 4, 5],
[5, 6, 6, 7, 7]])

幂运算

X ** 2
array([[
1,
4,
9,
16,
25],
[ 36,
49,
64,
81, 100],
[121, 144, 169, 196, 225]])

取余

X % 2
array([[1, 0, 1, 0, 1],
[0, 1, 0, 1, 0],
[1, 0, 1, 0, 1]])

等等

np.abs(X)
np.sin(X)
np.exp(X
np.power(X,2)
np.log(X)
np.log2(X)
np.lig10(X)

矩阵间的运算

矩阵之间的运算无非就是矩阵的+ ,-,*,/

A=np.arange(4).reshape(2,2)
A
array([[0, 1],
[2, 3]])
B=np.full((2,2),fill_value=10)
B
array([[10, 10],
[10, 10]])

这里无论是加减乘除都是相对应元素上的加减乘除。

A+B
array([[10, 11],
[12, 13]])
A-B
A*B
A/B 

如果要真正做矩阵的乘法的话,维度一定要对应起来。

A.dot(B)
array([[ 0, 10],
[20, 30]])

不光可以求两个矩阵的计算。
还可以求矩阵的转置和矩阵的逆

求转置

A.T
array([[0, 2],
[1, 3]])

求矩阵的逆

这个就比较麻烦,因为我们学过矩阵知道,方阵才有逆。

invA=np.linalg.inv(A)
intvA
array([[-1.5,
0.5],
[ 1. ,
0. ]])

如果矩阵不是 方阵可以求伪逆

X=np.arange(16).reshape([2,8])
array([[ 0,
1,
2,
3,
4,
5,
6,
7],
[ 8,
9, 10, 11, 12, 13, 14, 15]])
invX=np.linalg.pinv(X)
invX
array([[ -1.35416667e-01,
5.20833333e-02],
[ -1.01190476e-01,
4.16666667e-02],
[ -6.69642857e-02,
3.12500000e-02],
[ -3.27380952e-02,
2.08333333e-02],
[
1.48809524e-03,
1.04166667e-02],
[
3.57142857e-02,
-1.04083409e-17],
[
6.99404762e-02,
-1.04166667e-02],
[
1.04166667e-01,
-2.08333333e-02]])

向量与矩阵之间的运算

这是机器学习中常见的运算。
这里值得一说的是一个一维向量就是一个numpy的array,但是我们学过的向量也分行向量列向量。其实numpy可以自己判断!
首先看看一些“奇怪”的设计。

向量与矩阵的减法

这个怎么可能呢?违背常理,线性代数中只有两个矩阵维度相同才能做这样的操作不是么?

v=np.array([1,2])
v
array([1, 2])
A=np.arange(4).reshape(2,2)
A
array([[0, 1],
[2, 3]])
v+A
array([[1, 3],
[3, 5]])

我们发现numpy中向量与矩阵的加法就是矩阵的每一行的每个元素加上这个向量的每个元素。
相当于

np.vstack([v]*A.shape[0])+A
array([[1, 3],
[3, 5]])

其实向量的堆叠不需要使用vstack 可以用专门的函数tile
它可以把向量看成一个单元,然后进行单元堆叠

np.tile(v,(2,1)) #行上堆叠两次,列上一次
array([[1, 2],
[1, 2]])
np.tile(v,(2,2))
array([[1, 2, 1, 2],
[1, 2, 1, 2]])

向量与矩阵的乘法

numpy可以自动判断向量是行向量还是列向量体现在矩阵的乘法。

v.dot(A) # E行*列,矩阵乘法
array([4, 7])

这里就当成了一个行向量。

A.dot(v)
array([2, 8])

这里就成了列向量。神奇!

最后

以上就是冷艳爆米花为你收集整理的numpy基础学习大集合(二)前言Universal Function矩阵间的运算向量与矩阵之间的运算的全部内容,希望文章能够帮你解决numpy基础学习大集合(二)前言Universal Function矩阵间的运算向量与矩阵之间的运算所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(43)

评论列表共有 0 条评论

立即
投稿
返回
顶部