前言
最近在使用 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]]
参考
欢迎小可爱们,点赞 收藏 分享~