使用下面的代码,我希望得到linalg.norm(y-z)
等于零。我遵循Apply DFT matrix along each axis of 3D array in NumPy?的思想,因为FFT和DCT都是可分离的酉线性变换。但事实并非如此。
import numpy as np
from scipy.fftpack import dct
x = np.random.rand(5,5)
D = dct(np.eye(5), norm='ortho')
y = np.dot(D,np.dot(x, D.T))
z = dct(dct(x, axis = 0 , norm = 'ortho'), axis = 1 , norm = 'ortho')
1条答案
按热度按时间klh5stk11#
1.通过指定
axis=0
重新定义D
:1.通过指定
.T
并使用默认的axis=-1
来重新定义D
(并没有真正推广到更高的维度):1.使用
D.T @ x
表示沿x
的axis=0
的DCT沿着:在DFT的情况下,顺序无关紧要,因为矩阵是对称的(
D == D.T
)*,除了 * 是酉的(D.conj().T @ D == I
)。但是DCT矩阵不是对称的,所以你必须小心你使用的顺序。考虑DCT-II的定义:
当您构造运算符
D
以暗示D @ x
沿着行(axis=0
)沿着DCT-II时,必须定义D
,以便正确处理变换的协方差和逆变。完整示例: