Julia中LinearMaps.jl的函数参数型LinearMap()用法疑问
LinearMaps.jl 函数参数构造逻辑说明
核心设计逻辑
LinearMaps.jl 的核心是抽象线性算子,不需要生成完整的稠密矩阵,仅通过定义「算子作用在输入向量上的计算规则」,就能实现和原生矩阵完全一致的运算行为,适合处理大维度矩阵场景下的内存占用问题。
函数参数的构造规则
当你使用函数作为入参构造LinearMap时,示例中用到的签名规则如下:
LinearMap(前向映射函数, 伴随映射函数, 算子维度)
- 前向映射函数:定义线性算子右乘向量
L * x时的计算逻辑,要求输入为长度等于指定维度的1维向量,输出为同长度的1维向量 - 伴随映射函数:定义线性算子的伴随矩阵右乘向量
L' * x时的计算逻辑,要求输入输出规则和前向映射一致 - 算子维度:指定当前线性算子是N×N的方阵,也可以扩展为分别指定输入、输出维度实现非方阵构造
示例中cumsum的调用逻辑解释
你提到的cumsum需要指定dims参数的场景只在输入为≥2维的数组时生效,当输入为1维向量时,cumsum默认对唯一的维度做累积和运算,不需要额外传参,示例中的调用逻辑如下:
- 当你执行
B * x(x为长度10的1维向量)时,底层直接调用cumsum(x)得到正向累积和结果 - 当你执行
B' * x时,底层直接调用reverse(cumsum(reverse(x)))得到反向累积和的结果,这刚好是累积和算子的伴随运算规则
补充说明
- 所有后续基于
LinearMap对象的运算(加减、乘法、克罗内克积、分块拼接等)都不会直接生成稠密矩阵,只会在实际作用到向量做计算时,才会调用对应的映射函数执行计算 - 如果你需要定义作用在高维数组上的线性算子,可以在构造时额外指定输入的维度尺寸,这时候才需要在映射函数中指定
dims参数匹配对应维度的运算需求
内容的提问来源于stack exchange,提问作者Physics_Student
相关产品推荐
相关产品推荐

