python 复数操作

前言

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

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

代码:

# 生成复数矩阵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】将两个实数矩阵合并为一个复数矩阵
发布了3 篇原创文章 · 获赞 0 · 访问量 162

猜你喜欢

转载自blog.csdn.net/github_25176023/article/details/104726365
今日推荐