如何在Python中计算2×1复数向量的整体模长?
复数向量整体模长计算问题
问题背景
我有一个3×1的numpy复数矩阵:
import numpy as np matrix = np.matrix([[(0.0009118819655545739+0.0009118819655545738j)], [(0.0009118819655544588-0.0009118819655544589j)], [(-0.0009118819655545161-5.421010862427522e-20j)]])
通过以下代码删除最后一行,得到2×1的复数向量:
vector = np.delete(matrix, 2, 0)
得到的向量为:
vector = [[(0.0009118819655545739+0.0009118819655545738j)]] [[(0.0009118819655544588-0.0009118819655544589j)]]
现在我用循环执行np.absolute只能得到第一个元素的模长(0.0012895958429705512),想知道如何计算这个向量的整体模长,同时确认数学公式是否正确:若向量为[[(x1+x2j)],[(y1-y2j)]],则整体模长公式为sqrt((x1)**2 + (x2)**2 + (y1)**2 + (y2)**2),对应结果应为0.00182376392。
解答
公式正确性确认
你的数学公式是正确的。复数向量的整体模长(即欧几里得范数)计算方式就是将所有元素的实部和虚部的平方求和后开平方,等价于先计算每个元素的模长平方,求和后再开平方。
Numpy实现方法
不需要用循环,直接利用numpy的向量运算即可高效计算:
- 分步计算方式
# 计算每个元素的模长平方 mod_squared = np.square(np.absolute(vector)) # 求和后开平方得到整体模长 total_norm = np.sqrt(np.sum(mod_squared))
- 简洁范数函数调用
numpy的np.linalg.norm可以直接计算向量的欧几里得范数,对于复数向量默认就是计算你需要的整体模长:
total_norm = np.linalg.norm(vector)
执行上述代码后,得到的结果与你预期的0.00182376392基本一致(浮点精度会导致微小误差)。
内容的提问来源于stack exchange,提问作者UbuntuPython
相关产品推荐
相关产品推荐

