我将一些简单的IDL代码传递给Python.但是,从SciPy/NumPy包中返回的FFT值与IDL包不同,我无法找到原因.
这一切减少到8种元素的一个简单的例子,我发现,SciPy的/ NumPy的例程返回比IDL那些(归一化的问题,我想)更大8(2 ^ 3)倍的值.
以下是两种语言的示例代码(从此处复制):
signal = ([-2., 8., -6., 4., 1., 0., 3., 5.])
fourier = fft(signal)
print, fourier
Run Code Online (Sandbox Code Playgroud)
回报
(1.62500,0.00000)(0.420495,0.506282)(0.250000,0.125000)(-1.17050,-1.74372)(-2.62500,-0.00000)(-1.17050,1.74372)(0.250000,-0.125000)(0.420495,-0.506282)
from scipy.fftpack import fft
import numpy as N
…
signal = N.array([-2., 8., -6., 4., 1., 0., 3., 5.])
fourier = fft(signal)
print fourier
Run Code Online (Sandbox Code Playgroud)
回报
[13. + 0.j,3.36396103 + 4.05025253j,2.+ 1.j,-9.36396103-13.94974747j,-21.+ 0.j,-9.36396103 + 13.94974747j,2.-1.j,3.36396103 -4.05025253j]
我用NumPy包做到了,得到了相同的结果.我也试过print fft(signal, 8 )以防万一,但它返回了同样的,如预期的那样.
然而,并非所有,回到我真正的256个元素阵列,我发现差异不再是8或256,而是256*8!这只是疯了.
虽然我解决了这个问题,但我需要知道为什么会有这种差异.
解决了:这只是规范化,在某些时候我将IDL 256阵列分成8倍,我忘了删除.在Dougal的回答中,有我错过的文档.
这是我试图解压的十六进制代码。b'ABCDFGHa\x00a\x00a\x00a\x00a\x00\x00\x00\x00\x00\x00\x01' (它不应该有任何意义)
labels = unpack('BBBBBBBHHHHH5sB', msg)
struct.error: unpack requires a bytes argument of length 24
Run Code Online (Sandbox Code Playgroud)
据我计算,这两个都是长度 = 23,我的解包函数中的格式和十六进制值的长度。我不明白。
提前致谢
只是正式的编码问题.
如果我想使用指数十进制表示法在Python中编码值,
my_value1= 1E-5而不是代替my_value1= 0.000001
或
my_value2= 1E5代替my_value2= 100000
有没有任何格式可以做到这一点或只有丑陋的方式来放置所有0或使Python计算价值?
my_value= 10**(n)
Run Code Online (Sandbox Code Playgroud)
或者将其写成字符串并转换为浮点数!
对于5的例子,可以写整个,但是对于1E30或1E-30的顺序的数量可能太难看了,我认为使10**(n)或字符串1的操作毫无意义.
快速搜索没有给我什么,我快速通过
http://docs.python.org/2/library/decimal.html
,没有明显的解决方案.
我的意思是,如果不能做到这一点,那不是世界末日,但我很好奇是否存在.谢谢