如何用Pythonic方法统计Numpy矩阵中复数、实数及纯虚数的数量
Pythonic方法统计Numpy矩阵中纯实数、纯虚数与普通复数的数量
先还原问题中的矩阵:
import numpy as np arr = np.array([ [1.+0.j, 1.+0.j, 1.+0.j, 1.+0.j, 1.+0.j], [1.+0.j, 0.309+0.951j, -0.809+0.588j, -0.809-0.588j, 0.309-0.951j], [1.+0.j, -0.809+0.588j, 0.309-0.951j, 0.309+0.951j, -0.809-0.588j], [1.+0.j, -0.809-0.588j, 0.309+0.951j, 0.309-0.951j, -0.809+0.588j], [1.+0.j, 0.309-0.951j, -0.809-0.588j, -0.809+0.588j, 0.309+0.951j] ])
按要求忽略“复数是实数/虚数超集”的定义,我们单独统计三类元素:
- 纯实数:虚部近似为0
- 纯虚数:实部近似为0且虚部不为0
- 普通复数:实部和虚部都不为0
用Numpy的向量化操作就能高效完成统计,不用写低效循环:
# 统计纯实数:虚部在浮点精度范围内等于0 real_count = np.sum(np.isclose(arr.imag, 0)) # 统计纯虚数:实部近似为0,同时虚部不近似为0 imag_count = np.sum(np.isclose(arr.real, 0) & ~np.isclose(arr.imag, 0)) # 统计普通复数:虚部和实部都不近似为0 complex_count = np.sum(~np.isclose(arr.imag, 0) & ~np.isclose(arr.real, 0)) print(f"纯实数数量:{real_count}") print(f"纯虚数数量:{imag_count}") print(f"普通复数数量:{complex_count}")
运行结果:
纯实数数量:9 纯虚数数量:0 普通复数数量:16
补充说明
用np.isclose而非直接==0,是因为矩阵里的数值都是近似值(比如0.951是三角函数的近似结果),直接判断等于0会触发浮点数精度误差,np.isclose会在极小误差范围内判断相等,结果更可靠。
内容的提问来源于stack exchange,提问作者RSW
相关产品推荐
相关产品推荐

