Python数据科学快速入门系列 | 04Numpy四则运算矩阵运算和广播机制的爱恨情仇

Posted 机器未来

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python数据科学快速入门系列 | 04Numpy四则运算矩阵运算和广播机制的爱恨情仇相关的知识,希望对你有一定的参考价值。

这是机器未来的第43篇文章

原文首发地址:https://blog.csdn.net/RobotFutures/article/details/126493989


文章目录

1. 概述

本文总结了numpy常见的运算,四则运算与矩阵运算,以及它们的区别。同时描述了在形状不满足要求时,在特定情况下仍然可以运算的广播机制。

2. 四则运算

四则运算即是小学时学过的+、-、*、/,在numpy中ndarray数组对象怎么进行四则运算呢?

四则运算都是对位运算,数学公式如下:

# 生成2个3*3数组
import numpy as np

a = np.random.randint(low=1,high=100,size=(3,3))
b = np.random.randint(low=1,high=100,size=(3,3))
print(f"a:\\na, type:type(a)")
print(f"b:\\nb")

a:
[[84 16 27]
 [39 33 87]
 [82 16 37]], type:<class 'numpy.ndarray'>
b:
[[68 33 96]
 [92 43 69]
 [14  4 88]]

2.1 加法

s u m = ∑ i , j M , N ( a i j + b i j ) sum = \\sum_i, j^M,N(a_ij+b_ij) sum=i,jM,N(aij+bij)

# 加法
sum = a + b
print(f"sum:\\nsum")
sum:
[[128 154 172]
 [ 79 133  16]
 [ 96  39 115]]

2.2 减法

d i f f = ∑ i , j M , N ( a i j − b i j ) diff = \\sum_i, j^M,N(a_ij-b_ij) diff=i,jM,N(aijbij)

# 减法
diff = a - b
print(f"diff:\\ndiff")
diff:
[[-30   2 -26]
 [ 13   1  -6]
 [-18  -3  21]]

2.3 乘法

p r o d u c t = ∑ i , j M , N ( a i j ∗ b i j ) product = \\sum_i, j^M,N(a_ij*b_ij) product=i,jM,N(aijbij)

# 乘法
product = a * b
print(f"product:\\nproduct")
product:
[[3871 5928 7227]
 [1518 4422   55]
 [2223  378 3196]]

2.4 除法

q u o t i e n t = ∑ i , j M , N ( a i j / b i j ) quotient = \\sum_i, j^M,N(a_ij/b_ij) quotient=i,jM,N(aij/bij)

# 除法
quotient = a / b
print(f"quotient:\\nquotient")
quotient:
[[0.62025316 1.02631579 0.73737374]
 [1.39393939 1.01515152 0.45454545]
 [0.68421053 0.85714286 1.44680851]]

3. 矩阵运算

上面描述了ndarray数组对象的四则运算,如何利用numpy进行矩阵运算呢?
矩阵运算基本运算为加、减、乘法及数乘。

矩阵的加法、减法运算和数组的加法、减法运算一样,都是对位运算,数乘运算也比较简单,就是每个元素都乘以数,但是矩阵乘法和数组的乘法差距较大。

假设有两个矩阵, MxN矩阵A和NxS矩阵B, 两个矩阵矩阵相乘后结果为MxS矩阵。

矩阵A的列和矩阵B的行必须相等,才可以进行矩阵运算。

假设矩阵A为4*3的矩阵,矩阵B为3*2的矩阵

矩阵A:
[ a 0 , 0 a 0 , 1 a 0 , 2 a 1 , 0 a 1 , 1 a 1 , 2 a 2 , 0 a 2 , 1 a 2 , 2 a 3 , 0 a 3 , 1 a 3 , 2 ] \\beginbmatrix a_0,0 & a_0,1 & a_0,2 \\\\ a_1,0 & a_1,1 & a_1,2 \\\\ a_2,0 & a_2,1 & a_2,2 \\\\ a_3,0 & a_3,1 & a_3,2 \\endbmatrix a0,0a1,0a2,0a3,0a0,1a1,1a2,1a3,1a0,2a1,2a2,2a3,2

矩阵B:
[ b 0 , 0 b 0 , 1 b 1 , 0 b 1 , 1 b 2 , 0 b 2 , 1 ] \\beginbmatrix b_0,0 & b_0,1 \\\\ b_1,0 & b_1,1 \\\\ b_2,0 & b_2,1 \\\\ \\endbmatrix b0,0b1,0b2,0b0,1b1,1b2,1

矩阵A乘以矩阵B的结果4*2的矩阵:
[ a 0 , 0 ∗ b 0 , 0 + a 0 , 1 ∗ b 1 , 0 + a 0 , 2 ∗ b 2 , 0 a 0 , 0 ∗ b 0 , 1 + a 0 , 1 ∗ b 1 , 1 + a 0 , 2 ∗ b 2 , 1 a 1 , 0 ∗ b 0 , 0 + a 1 , 1 ∗ b 1 , 0 + a 1 , 2 ∗ b 2 , 0 a 1 , 0 ∗ b 0 , 1 + a 1 , 1 ∗ b 1 , 1 + a 1 , 2 ∗ b 2 , 1 a 2 , 0 ∗ b 0 , 0 + a 2 , 1 ∗ b 1 , 0 + a 2 , 2 ∗ b 2 , 0 a 2 , 0 ∗ b 0 , 1 + a 2 , 1 ∗ b 1 , 1 + a 2 , 2 ∗ b 2 , 1 a 3 , 0 ∗ b 0 , 0 + a 3 , 1 ∗ b 1 , 0

以上是关于Python数据科学快速入门系列 | 04Numpy四则运算矩阵运算和广播机制的爱恨情仇的主要内容,如果未能解决你的问题,请参考以下文章

Python数据科学快速入门系列 | 08类别比较图表应用总结

Python数据科学快速入门系列 | 09Matplotlib数据关系图表应用总结

Python数据科学快速入门系列 | 10Matplotlib数据分布图表应用总结

猿创征文|Python数据科学快速入门系列 | 05常用科学计算函数

Python数据科学快速入门系列 | 01Numpy初窥——基础概念

Python数据科学 | 11应用实战:我的第一个开源项目-基金定投回测工具