scipy,fftpack和float64

时间:2012-09-06 19:54:55

标签: python 64-bit scipy

我想使用scipy.fftpack中的dct功能和一个numpy float64数组。但是,它似乎只针对np.float32实现。有什么快速的解决方法可以做到这一点吗?我很快调查了它,但我不确定所有依赖项。所以,在弄乱一切之前,我想我会在这里寻求提示!

到目前为止,我唯一能找到的就是这个链接:http://mail.scipy.org/pipermail/scipy-svn/2010-September/004197.html

提前致谢。

这是它引发的ValueError:

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-12-f09567c28e37> in <module>()
----> 1 scipy.fftpack.dct(c[100])

/usr/local/Cellar/python/2.7.3/lib/python2.7/site-packages/scipy/fftpack/realtransforms.pyc in dct(x, type, n, axis, norm, overwrite_x)
    118         raise NotImplementedError(
    119               "Orthonormalization not yet supported for DCT-I")
--> 120     return _dct(x, type, n, axis, normalize=norm, overwrite_x=overwrite_x)
    121 
    122 def idct(x, type=2, n=None, axis=-1, norm=None, overwrite_x=0):

/usr/local/Cellar/python/2.7.3/lib/python2.7/site-packages/scipy/fftpack/realtransforms.pyc in _dct(x, type, n, axis, overwrite_x, normalize)
    215             raise ValueError("Type %d not understood" % type)
    216     else:
--> 217         raise ValueError("dtype %s not supported" % tmp.dtype)
    218 
    219     if normalize:

ValueError: dtype >f8 not supported

1 个答案:

答案 0 :(得分:5)

问题不在于双精度。当然支持双精度。问题是你有一个小端计算机和(可能从文件加载文件?)有大端数据,请注意>中的dtype >f8 not supported。看来你只需要将它自己投射到原生双。如果你知道它的双精度,你可能只想将everytiong转换为本机顺序一次:

c = c.astype(float)

虽然我猜你也可以查看c.dtype.byteorder我认为应该是'=',以及是否可以切换......:

if c.dtype.byteorder != '=':
    c = c.astype(c.dtype.newbyteorder('=')) 

如果碰巧有单精度或整数,哪个也应该有用......