输入变长时,NumPy的rfft与tf.spectral.rfft明显不同

时间:2019-04-10 03:16:04

标签: python numpy tensorflow

我有以下代码:

import tensorflow as tf
import numpy as np

sess = tf.InteractiveSession()
x = tf.placeholder(tf.float32)
data = np.arange(100)
np_rfft = np.fft.rfft(data)
tf_rfft = sess.run(tf.spectral.rfft(x), feed_dict={x: data})
print('numpy rfft: ', np_rfft[-10:])
print('tf rfft: ', tf_rfft[-10:])

分别使用NumPy和Tensorflow计算序列的rfft并打印输出的最后10个元素。结果是:

numpy rfft:  [-50.+14.52634284j -50.+12.83781802j -50.+11.17632414j -50. +9.53801011j
 -50. +7.91922202j -50. +6.31646892j -50. +4.72639156j -50. +3.14573336j
 -50. +1.5713133j  -50. +0.j        ]
tf rfft:  [-49.973206+1.4518965e+01j -49.973743+1.2831883e+01j
 -49.97333 +1.1170865e+01j -49.973694+9.5335712e+00j
 -49.973335+7.9155731e+00j -49.973633+6.3136597e+00j
 -49.973347+4.7244053e+00j -49.97325 +3.1440246e+00j
 -49.97356 +1.5712284e+00j -49.977325+7.4134197e-04j]

虽然仍然存在一些细微的差异,但看起来很接近。但是,当我将输入大小从100更改为10000时,即将data = np.arange(100)替换为data = np.arange(10000),我得到了:

numpy rfft:  [-5000.+14.13720461j -5000.+12.56639707j -5000.+10.99559201j
 -5000. +9.42478912j -5000. +7.85398809j -5000. +6.28318861j
 -5000. +4.71239038j -5000. +3.14159307j -5000. +1.57079638j
 -5000. +0.j        ]
tf rfft:  [ -223.39752  -3.5563445j  -221.78137 -73.83969j
  -223.1894   -3.6413317j  -219.48682-102.406456j
  -223.39314  -3.806113j   -205.63431-167.19771j
  -223.0936   -4.0063415j  -152.52483-327.77655j
  -223.42125  -4.045018j  -1357.4597  -14.645973j ]

显然,rfft实现的NumPy版本与其Tensorflow版本不同,并且随着输入大小变大,差异也越来越大。为什么会发生?如果我必须在Tensorflow中实现该功能,是否可以获得与np.fft.rfft相同的结果?

0 个答案:

没有答案