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

Python中适配Numba的(K,3)矩阵向量化计算方案咨询

向量化实现(K,3)矩阵的3x3xK张量计算

原始单向量场景

当m、n为长度3的向量时,可通过以下代码生成3x3矩阵:

e_matrix = np.array([m[i]*m[j]-n[i]*n[j] for i in range(3) for j in range(3)])

批量场景需求

现在m、n为shape(K,3)的矩阵,需要生成shape(3,3,K)的e_matrix,已知朴素循环实现:

e_matrix = np.zeros((3,3,K))

for k in range(K):
    e_matrix[:,:,k] = np.array([m[k,i]*m[k,j]-n[k,i]*n[k,j] for i in range(3) for j in range(3)]) 

兼容Numba的向量化方案

可以利用NumPy的广播机制实现完全向量化,且该方案兼容Numba JIT编译(无tensordot等受限操作):

import numpy as np

# 生成(K,3,3)的外积矩阵
m_outer = m[:, :, None] * m[:, None, :]
n_outer = n[:, :, None] * n[:, None, :]
# 转置得到目标shape(3,3,K)
e_matrix = (m_outer - n_outer).transpose(1, 2, 0)

Numba JIT编译验证

将上述逻辑封装为JIT函数,可实现更快的运行速度:

from numba import jit

@jit(nopython=True)
def compute_e_matrix(m, n):
    m_outer = m[:, :, None] * m[:, None, :]
    n_outer = n[:, :, None] * n[:, None, :]
    return (m_outer - n_outer).transpose(1, 2, 0)

# 调用示例
K = 100
m = np.random.rand(K, 3)
n = np.random.rand(K, 3)
e_matrix = compute_e_matrix(m, n)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 01:30:24