我可以首先得到给定大小的DFT矩阵,比如n
import numpy as np
n = 64
D = np.fft.fft(np.eye(n))
当然,FFT只是一种将D
应用于向量的快速算法:
2D FFT可通过对矩阵的行和列应用D
来获得:
x = np.random.randn(n,n)
ft2 = np.dot(x, D.T) # Apply D to rows.
ft2 = np.dot(D, ft2) # Apply D to cols.
print( np.abs(ft2 - fft.fft2(x)).max() )
# near machine round off again
如何对三维离散傅里叶变换进行类似计算?
也就是说
x = np.random.randn(n,n,n)
ft3 = # dot operations using D and x
print( np.abs(ft3 - fft.fftn(x)).max() )
# prints near zero
本质上,我认为我需要将D
应用于卷中的每个列向量,然后是卷中的每个行向量,最后是每个“深度向量”。但我不知道如何使用dot
来实现这一点。在
可以使用
einsum
表达式对每个索引执行转换:这也可以写成一个单独的NumPy步骤:
^{pr2}$但是,如果没有优化参数(在NumPy 1.12+中可用),它将非常缓慢。您也可以使用
dot
来完成每一个步骤,但是它需要一点重塑和转换。在nump1.14+中,einsum
函数将自动检测BLAS操作并为您执行此操作。在相关问题 更多 >
编程相关推荐