如何在多维NumPy数组中求解二维方阵的厄米特矩阵
对多维NumPy数组中的每个2×2方阵求厄米特矩阵
给定形状为(3, 2, 2, 2)的NumPy数组F,其中前两个维度代表类别条目,最后两个维度对应2×2的二维方阵。需要对每个2×2方阵计算其厄米特矩阵,且输出数组的形状需与原数组保持一致((3, 2, 2, 2))。
输入示例代码
import numpy as np F = np.array([[[[ 1+2.j, 2-1.j],[1+2.j, 2-1.j]], [[ 0, 2+1.j],[0, 3-1.j]]], [[[ 1+2.j, 2-1.j],[ 1+2.j, 2-1.j]], [[ 0, 2+1.j],[ 0, 3-1.j]]], [[[ 1+2.j, 2-1.j],[ 1+2.j, 2-1.j]], [[ 0, 2+1.j],[ 0, 3-1.j]]]])
期望输出示例
F_Herm = np.array([[[[ 1-2.j, 1-2.j],[2+1.j, 2+1.j]], [[ 0, 0],[2-1.j, 3+1.j]]], [[[ 1-2.j, 1-2.j],[2+1.j, 2+1.j]], [[ 0, 0],[ 2-1.j, 3+1.j]]], [[[ 1-2.j, 1-2.j],[ 2+1.j, 2+1.j]], [[ 0, 0],[2-1.j, 3+1.j]]]])
解决方案
厄米特矩阵是矩阵的共轭转置,即先对矩阵转置,再对每个元素取复数共轭。针对多维数组,只需对最后两个维度(对应2×2方阵)执行转置操作,再整体取共轭即可:
import numpy as np # 输入数组 F = np.array([[[[ 1+2.j, 2-1.j],[1+2.j, 2-1.j]], [[ 0, 2+1.j],[0, 3-1.j]]], [[[ 1+2.j, 2-1.j],[1+2.j, 2-1.j]], [[ 0, 2+1.j],[0, 3-1.j]]], [[[ 1+2.j, 2-1.j],[1+2.j, 2-1.j]], [[ 0, 2+1.j],[0, 3-1.j]]]]) # 计算每个2×2方阵的厄米特矩阵 F_Herm = np.conj(F.transpose(0, 1, 3, 2)) # 验证输出形状 print(F_Herm.shape) # 输出: (3, 2, 2, 2)
代码说明
F.transpose(0, 1, 3, 2):保持前两个维度(索引0和1)不变,交换最后两个维度(索引2和3),实现每个2×2方阵的转置。np.conj():对转置后的数组中所有复数元素取共轭,得到厄米特矩阵。- 最终输出数组的形状与原数组完全一致,符合要求。
内容的提问来源于stack exchange,提问作者learning statistics
相关产品推荐
相关产品推荐

