You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Julia中矩阵与向量高效叉积实现及N行矩阵通用方法

符合Julianic风格的高效实现方案

方法一:矩阵乘法(BLAS优化,适配大规模矩阵)

叉乘cross(a, v)可转化为行向量a与向量v的反对称矩阵的乘积,这种方式依托BLAS优化,性能最优,适合处理大尺寸矩阵。

# 生成3维向量的反对称矩阵
function antisymmetric(v::AbstractVector)
    @assert length(v) == 3 "仅支持3维向量的反对称矩阵构造"
    return [0.  -v[3]  v[2];
            v[3]  0.  -v[1];
           -v[2] v[1]  0.]
end

# 输入示例
A = [1. 2. 3.; 4. 5. 6.]
v = [0.1, 0.2, 0.4]

# 计算结果
result = A * antisymmetric(v)

运行后得到的结果矩阵为:

2×3 Matrix{Float64}:
 0.2  -0.1   0.0
 0.8  -1.0   0.3

(注:原提问中的预期结果第二列数值存在笔误,正确结果应为-1.0)

方法二:迭代器堆叠(代码简洁,适配中小规模矩阵)

通过eachrow遍历矩阵行,结合广播和堆叠操作实现,代码更直观:

# 输入示例
A = [1. 2. 3.; 4. 5. 6.]
v = [0.1, 0.2, 0.4]

# Julia 1.9+ 推荐写法
result = stack(cross(row, v) for row in eachrow(A))'

# 兼容旧版本Julia的写法
result = reduce(vcat, transpose.(cross.(eachrow(A), Ref(v))))

推广到N行矩阵

两种方案均天然支持任意行数N的3列矩阵A:

  • 矩阵乘法方案:只要A是N×3维度,A * antisymmetric(v)会直接输出N×3的结果矩阵,每行对应原矩阵行与v的叉乘结果。
  • 迭代器堆叠方案:eachrow(A)会遍历所有N行,最终自动堆叠为N×3的结果矩阵。

前提条件:矩阵A必须为3列(每行是3维向量),向量v必须为3维,这是叉乘cross的固有要求。

内容的提问来源于stack exchange,提问作者CrisPlusPlus

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 17:15:36