Python 复数操作

前言

最近在使用 librosa (一个用来处理信号的库)过程中遇到复数操作,笔者记录了一下操作过程,主要是要将复数矩阵(n x m)变成矩阵(n x m x 2),然后返回到复数矩阵。

复数(n x m)转矩阵(n x m x 2)

复数矩阵A(n x m)中每一个点 A i , j A_{i,j} Ai,j 都是复数值 a + b i a+bi a+bi ,然后转成矩阵B(n x m x 2)每个点是 [ a , b ] [a,b] [a,b]
代码:

# 复数矩阵A
A = np.array([[1,2+3.j,3,4], [5,6,7+1.j,8], [9,10,11,12]], dtype=np.complex64)
print(A)

# 转成矩阵B
B=np.stack([np.real(A), np.imag(A)], axis=-1)
print(B)

输出:

[[  1.+0.j   2.+3.j   3.+0.j   4.+0.j]
 [  5.+0.j   6.+0.j   7.+1.j   8.+0.j]
 [  9.+0.j  10.+0.j  11.+0.j  12.+0.j]]
[[[  1.   0.]
  [  2.   3.]
  [  3.   0.]
  [  4.   0.]]

 [[  5.   0.]
  [  6.   0.]
  [  7.   1.]
  [  8.   0.]]

 [[  9.   0.]
  [ 10.   0.]
  [ 11.   0.]
  [ 12.   0.]]]

矩阵(n x m x 2)转复数(n x m)

代码:

# 生成 矩阵 B
A = np.array([[1,2+3.j,3,4], [5,6,7+1.j,8], [9,10,11,12]], dtype=np.complex64)
B=np.stack([np.real(A), np.imag(A)], axis=-1)
print(B)

# 转换成复数矩阵
r_A=1j*B[:,:,1]
r_A+= B[:,:,0]
print(r_a)

# 无差
print(r_A-A)

输出:

[[[  1.   0.]
  [  2.   3.]
  [  3.   0.]
  [  4.   0.]]

 [[  5.   0.]
  [  6.   0.]
  [  7.   1.]
  [  8.   0.]]

 [[  9.   0.]
  [ 10.   0.]
  [ 11.   0.]
  [ 12.   0.]]]
[[  1.+0.j   2.+3.j   3.+0.j   4.+0.j]
 [  5.+0.j   6.+0.j   7.+1.j   8.+0.j]
 [  9.+0.j  10.+0.j  11.+0.j  12.+0.j]]
[[ 0.+0.j  0.+0.j  0.+0.j  0.+0.j]
 [ 0.+0.j  0.+0.j  0.+0.j  0.+0.j]
 [ 0.+0.j  0.+0.j  0.+0.j  0.+0.j]]

参考

  1. how-to-convert-a-numpy-complex-array-to-a-two-element-float-array
  2. 【python】将两个实数矩阵合并为一个复数矩阵

欢迎小可爱们,点赞 收藏 分享~

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值