1

numpyfloat64の配列でscipy.fftpackのdct機能を使用したいと思います。ただし、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
4

1 に答える 1

5

問題は倍精度ではありません。もちろん倍精度もサポートされています。問題は、リトルエンディアンのコンピューターがあり、(ファイルからファイルをロードしている可能性がありますか?)ビッグエンディアンのデータがあること>ですdtype >f8 not supported。自分でネイティブダブルにキャストするだけのようです。倍精度がわかっている場合は、everytiongをネイティブの順序に一度だけ変換することをお勧めします。

c = c.astype(float)

c.dtype.byteorderどちらをすべきかを確認することもできると思いますが'='、もしそうなら、切り替えてください...何かに沿って:

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

これは、単精度または整数を使用している場合にも機能するはずです...

于 2012-09-06T21:02:00.677 に答える