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

Python中标量向量与泡利矩阵向量的点积运算实现问题

实现标量向量与泡利矩阵向量点积的方案

你需要实现的运算本质是对应分量相乘后求和,即 d·σ = a*σₓ + b*σᵧ + c*σ_z,最终输出为一个2×2的复数矩阵,以下是两种可行的实现方式:

方案1:使用np.einsum(推荐,逻辑直观无需修改原数组结构)

einsum可以自由指定张量的运算维度,完美适配该场景。当d为形状(3,)的标量数组、sigma为形状(3,2,2)的泡利矩阵数组时,直接指定对第一个维度求和即可:

result = np.einsum('i,ijk->jk', d, sigma)

方案2:使用广播机制+求和

给d增加两个维度适配sigma的后两维,广播相乘后对第一个维度求和:

result = (d[:, np.newaxis, np.newaxis] * sigma).sum(axis=0)

可运行验证示例

import numpy as np

# 定义泡利矩阵
sigma_x = np.array([[0, 1], [1, 0]], dtype=complex)
sigma_y = np.array([[0, -1j], [1j, 0]], dtype=complex)
sigma_z = np.array([[1, 0], [0, -1]], dtype=complex)

# 示例标量向量d
d = np.array([1+2j, 3, 4j])
sigma = np.array([sigma_x, sigma_y, sigma_z])

# 两种方案验证
res_einsum = np.einsum('i,ijk->jk', d, sigma)
res_broadcast = (d[:, np.newaxis, np.newaxis] * sigma).sum(axis=0)
res_manual = d[0]*sigma_x + d[1]*sigma_y + d[2]*sigma_z

print(np.allclose(res_einsum, res_manual)) # 输出 True
print(np.allclose(res_broadcast, res_manual)) # 输出 True

常见错误说明

你之前使用dot/matmul未得到预期结果,是因为这两个函数默认的维度匹配规则不适配当前“对第一个维度加权求和”的需求;而你将d修改为每个元素乘单位矩阵后,若要得到正确结果可以用np.einsum('ijk,ikl->jl', d, sigma)实现,但属于冗余操作,无需修改原d的结构即可完成运算。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 10:03:04