NumPy 系列(六):numpy 数组函数

6.1 矩阵乘积

  • 第五章中的乘法都是"逐元素相乘",这里介绍线性代数中的矩阵乘 积,
    本节只需要使用 np.dot( ) 函数。
  • 当矩阵乘积中混有向量时,根据需求,其可充当行矩阵,也可充当列矩阵,
    但混有向量时输出结果必为向量。

(1)向量与向量的乘积

设两个向量的形状按前后顺序分别是 5 以及 5 。从矩阵乘法的角度,有

(1,5) * ( 5,1) = (1,1) ,因此输出的应该是形状为 1 的向量。

python 复制代码
import numpy as np
arr1 = np.arange(5)
arr2 = np.arange(5)
print(arr1)
print(arr2)
print(np.dot(arr1,arr2))
复制代码
[0 1 2 3 4]
[0 1 2 3 4]
30

(2)向量与矩阵的乘积

设 向 量 的 形 状 是 5 , 矩 阵 的 形 状 是 (5,3) 。 从 矩 阵 乘 法 的 角 度 , 有

(1,5) * ( 5,3) = (1,3) ,因此输出的应该是形状为 3 的向量。

python 复制代码
import numpy as np
arr1 = np.arange(5)
arr2 = np.arange(15).reshape(5,3)
print(arr1)
print(arr2)
print(np.dot(arr1,arr2))
复制代码
[0 1 2 3 4]
[[ 0  1  2]
 [ 3  4  5]
 [ 6  7  8]
 [ 9 10 11]
 [12 13 14]]
[ 90 100 110]

(3)矩阵与向量的乘积

设 矩 阵 的 形 状 是 (3,5) , 向 量 的 形 状 是 5 。 从 矩 阵 乘 法 的 角 度 , 有

( 3,5) * ( 5,1) = ( 3,1) ,因此输出的应该是形状为 3 的向量。

python 复制代码
import numpy as np
arr1 = np.arange(15).reshape(3,5)
arr2 = np.arange(5)
print(arr1)
print(arr2)
print(np.dot(arr1,arr2))
复制代码
[[ 0  1  2  3  4]
 [ 5  6  7  8  9]
 [10 11 12 13 14]]
[0 1 2 3 4]
[ 30  80 130]

(4)矩阵与矩阵的乘积

设两个矩阵的形状按前后顺序分别是 (3,4) 以及 (4,2) 。从矩阵乘法的角度,

有 ( 3, 4 ) * ( 4,2 ) = ( 3,2 ) ,因此输出的应该是形状为 (3,2) 的矩阵。

python 复制代码
import numpy as np
arr1=np.arange(1,13).reshape(3,4)
arr2=np.random.random([4,2])
arr3=np.dot(arr1,arr2)
print(arr1,'\n\n',arr2,'\n\n')
print(arr3)
复制代码
[[ 1  2  3  4]
 [ 5  6  7  8]
 [ 9 10 11 12]] 

 [[0.88254898 0.56348161]
 [0.96504666 0.1235308 ]
 [0.55066902 0.16574346]
 [0.46506491 0.24950043]] 


[[ 6.324909    2.30577533]
 [17.77822726  6.71480055]
 [29.23154552 11.12382578]]

6.2 数学函数

NumPy 设计了很多数学函数,这里列举其中最重要、最常见的几个。

python 复制代码
import numpy as numpy
# 绝对值
print(np.abs(np.array([-1,2,-4,0])))
# 三角函数
print(np.sin(np.array([0,np.pi/4,np.pi/2,np.pi])))
print(np.cos(np.array([0,np.pi/4,np.pi/2,np.pi])))
print(np.tan(np.array([0,np.pi/4,np.pi/2,np.pi]))) # 注:理论上没有tan(pi/2)
# 指数
x=np.arange(1,4)
print('e^x:',np.exp(x))
print('2^x:',2**x)
print('10^x:',10**x)
# 对数
x=np.array([1,10,100,1000])
print('lnx:',np.log(x))
print('logx:',np.log(x)/np.log(10))
print('log2x:',np.log(x)/np.log(2))
复制代码
[1 2 4 0]
[0.00000000e+00 7.07106781e-01 1.00000000e+00 1.22464680e-16]
[ 1.00000000e+00  7.07106781e-01  6.12323400e-17 -1.00000000e+00]
[ 0.00000000e+00  1.00000000e+00  1.63312394e+16 -1.22464680e-16]
e^x: [ 2.71828183  7.3890561  20.08553692]
2^x: [2 4 8]
10^x: [  10  100 1000]
lnx: [0.         2.30258509 4.60517019 6.90775528]
logx: [0. 1. 2. 3.]
log2x: [0.         3.32192809 6.64385619 9.96578428]

6.3 聚合函数

聚合很有用,这里用矩阵演示。向量与之一致,但没有 axis 参数。以下在注

释中介绍了 6 个最重要的聚合函数,其用法完全一致,仅演示其中 3 个。

python 复制代码
import numpy as np
# 最大最小值函数 np.max()和np.min()
arr=np.random.random((2,3))
print(arr)
print(np.max(arr,axis=0)) # 按照第0维度比较取最大值,输出的是 !向量!
print(np.max(arr,axis=1)) # 按照第1维度比较取最大值,输出的是 !向量!
print(np.max(arr)) # 整体求最值,输出的是数值
复制代码
[[0.44539283 0.49987913 0.83105926]
 [0.5879637  0.21155906 0.62317448]]
[0.5879637  0.49987913 0.83105926]
[0.83105926 0.62317448]
0.8310592624903511
python 复制代码
# 求和函数 np.sum() 与 求积函数 np.prod()
print(np.sum(arr,axis=0)) # 输出的是向量

print(np.prod(arr,axis=1)) # 输出的是向量

print(np.sum(arr)) # 输出的是数值
print(np.prod(arr)) # 输出的是数值
复制代码
[1.03335654 0.71143819 1.45423374]
[0.18502918 0.07751608]
3.1990284639749205
0.014342736526674758
python 复制代码
# 求均值 np.mean() 和 标准差(即方差开根号)np.std()
arr=np.arange(10).reshape(2,5)
print(arr)
print(np.mean(arr,axis=0)) # 输出的是向量
print(np.mean(arr,axis=1))
print(np.mean(arr)) # 输出的是数值
print(np.std(arr,axis=0)) # 输出的是向量
print(np.std(arr,axis=1))
print(np.std(arr)) # 输出的是数值
复制代码
[[0 1 2 3 4]
 [5 6 7 8 9]]
[2.5 3.5 4.5 5.5 6.5]
[2. 7.]
4.5
[2.5 2.5 2.5 2.5 2.5]
[1.41421356 1.41421356]
2.8722813232690143
  • 当 axis=0 时,最终结果与每一行的元素个数一致;
    当 axis=1 时,最终结果与每一列的元素个数一致。
  • 考虑到大型数组难免有缺失值,以上聚合函数碰到缺失值时会报错,因此
    出现了聚合函数的安全版本 ,即计算 时忽 略缺失 值:np.nansum( )、
    np.nanprod( ) 、np.nanmean( )、np.nanstd( )、np.nanmax( )、np.nanmin( )。
相关推荐
人工干智能2 小时前
Python的大杀器:Jupyter Notebook处理.ipynb文件
开发语言·python·jupyter
跳跳的向阳花3 小时前
02、Python从入门到癫狂:函数与数据容器
开发语言·python
这里有鱼汤3 小时前
如何用Python找到股票的支撑位和压力位?——均线簇
后端·python
啃啃大瓜3 小时前
字符串
python
啊森要自信3 小时前
【 GUI自动化测试】GUI自动化测试(一) 环境安装与测试
开发语言·python·ui·单元测试·pytest
love530love3 小时前
EPGF架构:Python开发的长效稳定之道
开发语言·ide·人工智能·windows·python·架构·pycharm
databook3 小时前
Manim实现涟漪扩散特效
后端·python·动效
Q_Q5110082854 小时前
python++springboot+nodejs微信小程序高校实验室管理系统 实验室预约登记 设备借用管理 实验记录审核系统
spring boot·python·微信小程序·django·flask·node.js
FreeBuf_4 小时前
微软修复CVSS 10.0分高危Entra ID漏洞CVE-2025-55241
python·microsoft·flask