当前位置: 首页 > news >正文

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

6.1 矩阵乘积

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

(1)向量与向量的乘积

设两个向量的形状按前后顺序分别是 5 以及 5 。从矩阵乘法的角度,有
(1,5) * ( 5,1) = (1,1) ,因此输出的应该是形状为 1 的向量。

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 的向量。

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 的向量。

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) 的矩阵。

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 设计了很多数学函数,这里列举其中最重要、最常见的几个。

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 个。

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
# 求和函数 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
# 求均值 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( )。
http://www.dtcms.com/a/394611.html

相关文章:

  • 手写链路追踪-日志追踪性能分析
  • 数据库自增字段归零(id)从1开始累加
  • 轻量级本地化解决方案:实现填空题识别与答案分离的自动化流程
  • P1104 生日-普及-
  • CMake如何添加.C.H文件
  • 实时数据如何实现同步?一文讲清数据同步方式
  • 六、Java框架
  • 施耐德 M340 M580 数据移动指令 EXTRACT
  • 4. 引用的本质
  • 专业历史知识智能体系统设计与实现
  • 算法基础篇(4)枚举
  • 【C++】二叉搜索树及其模拟实现
  • 第二十一讲:C++异常
  • 2025年9月第2周AI资讯
  • 从 UNet 到 UCTransNet:一次分割项目中 BCE Loss 失效的踩坑记录
  • leetcode刷题记录2(java)
  • JAVA八股文——方法区
  • 链表操作与反转
  • AI编程 -- 学习笔记
  • 动态规划问题 -- 子数组模型(乘积最大数组)
  • 【AIGC】大模型面试高频考点18-大模型压力测试指标
  • Cannot find a valid baseurl for repo: base/7/x86_64
  • Lowpoly建模练习集
  • 六、kubernetes 1.29 之 Pod 控制器02
  • OpenCV:人脸检测,Haar 级联分类器原理
  • 类和对象 (上)
  • FreeRTOS 队列集(Queue Set)机制详解
  • 【论文速递】2025年第20周(May-11-17)(Robotics/Embodied AI/LLM)
  • 【秋招笔试】2025.09.21网易秋招笔试真题
  • C++ 之 【特殊类设计 与 类型转换】