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( )。
相关推荐
量化Mike14 分钟前
【python报错】解决卸载Python时报错问题:No Python installation was detected
开发语言·python
2501_9417987326 分钟前
Python高性能网络爬虫实战:异步IO与多线程结合代码解析
开发语言·python
java1234_小锋27 分钟前
基于Python深度学习的车辆车牌识别系统(PyTorch2卷积神经网络CNN+OpenCV4实现)视频教程 - 车牌矩阵定位
python·深度学习·cnn·车牌识别
linzeyang40 分钟前
Advent of Code 2025 挑战全手写代码 Day 1 - 秘密入口
python·github
阿郎_20111 小时前
python自动化脚本-下载小说
python·selenium·网络爬虫
ERP老兵-冷溪虎山1 小时前
Python/JS/Go/Java同步学习(第五十篇半)四语言“path路径详解“对照表: 看完这篇定位文件就通透了(附源码/截图/参数表/避坑指南)
java·javascript·python·golang·中医编程·编程四语言同步学·path路径详解
Data_agent1 小时前
1688获得1688公司档案信息API,python请求示例
开发语言·数据库·python
vx_vxbs663 小时前
【SSM高校普法系统】(免费领源码+演示录像)|可做计算机毕设Java、Python、PHP、小程序APP、C#、爬虫大数据、单片机、文案
android·java·python·mysql·小程序·php·idea
田里的水稻3 小时前
Python_编程中代码注释相关格式 PEP8 — Python 官方代码风格指南
开发语言·python
丹宇码农3 小时前
consul集群搭建
python·consul