有M??N 维度的矩阵,将它转化为MN??1的矩阵
import numpy as np
from numpy import squeeze
M, N = 4, 3
h_mat = np.random.randn(M, N)
h_new = squeeze(h_mat.T.reshape(-1, 1))
print(h_new, h_mat, h_new.shape, h_mat.shape)
[-1.06950402 0.57459646 0.41926508 3.20023608 -0.8934199 -1.48817502
-1.46684445 1.04572083 -0.2769263 0.83589263 0.34593235 0.34324631]
[[-1.06950402 -0.8934199 -0.2769263 ]
[ 0.57459646 -1.48817502 0.83589263]
[ 0.41926508 -1.46684445 0.34593235]
[ 3.20023608 1.04572083 0.34324631]]
(12,) (4, 3)
将虚数矩阵转化为实数矩阵
这里m为N*1维矩阵
from numpy import real, imag
import numpy as np
mat = np.array([1, 2, 3, -1, -2, -3]) + 1j * np.array([1, 1, 1, 2, 2, 2])
real_mat = squeeze(real(mat).reshape(-1, 1))
img_mat = squeeze(imag(mat).reshape(-1, 1))
all_mat = np.hstack((real_mat, img_mat))
print(mat, "\n", all_mat, "\n", all_mat.shape)
vec_size = int(len(all_mat)/2)
real_part = all_mat[:vec_size,]
img_part = all_mat[vec_size:,]
recon_mat = real_part + 1j * img_part
np.array_equal(mat, recon_mat)
输出:
[ 1.+1.j 2.+1.j 3.+1.j -1.+2.j -2.+2.j -3.+2.j]
[ 1. 2. 3. -1. -2. -3. 1. 1. 1. 2. 2. 2.]
(12,)
True
两个类似的,一个负号的区别
import numpy as np
from numpy import real,imag
mat = np.array([1, 2, 3, -1, -2, -3]) + 1j * np.array([1, 1, 1, 2, 2, 2]).reshape(-1,1)
mat = mat * mat.T
real_mat = real(mat)
img_mat = imag(mat)
up = np.hstack((real_mat, -img_mat))
down = np.hstack((img_mat, real_mat))
all_mat = np.vstack((up, down))
print(all_mat)
mat_size = int(all_mat.shape[0]/2)
real_part = all_mat[:mat_size,:mat_size]
img_part = all_mat[mat_size:,:mat_size]
final_mat = real_part + 1j * img_part
np.array_equal(final_mat, mat)
|