リストからデータを読み込み、フーリエ変換して、プロットする前にシフトするプログラムを書いています。これまでのところ、コードはDICOMファイルから分光データを取得し、それをリストに入れます。各要素には、個々のFID/スペクトルの値を含む配列が含まれています。
from pylab import *
import dicom
plan=dicom.read_file("")
all_points = array(plan.SpectroscopyData)
cmplx_data = all_points[0::2] + 1j*all_points[1::2]
frames = int(plan.NumberOfFrames)
fid_pts = len(cmplx_data)/frames
fid_list = []
for fidN in arange(frames):
offset = fidN * fid_pts
current_fid = cmplx_data[offset:offset+fid_pts]
fid_list.append(current_fid)
これはデータをグループ化するのに問題なく機能しますが、生成された配列を使用しようとすると問題が発生します。まず、データの複雑な部分のみを表示しようとする場合、たとえば次のようになります。
plot(complex(fid_list[0]))
戻り値
Traceback (most recent call last)
/home/dominicc/Desktop/<ipython-input-37-4146b7fbfd7c> in <module>()
----> 1 plot(complex(fid_list[0]))
TypeError: only length-1 arrays can be converted to Python scalars
次に、そして最も重要なことですが、FFTされたデータのゼロ周波数シフトをプロットしようとすると、無限再帰が発生します。
plot(fftshift(fft(fid_list[0])))
次のエラーが発生する
/home/dominicc/Desktop/New_Script.py in fftshift(fid_in)
23
24 def fftshift(fid_in):
---> 25 fft_fid_in = fft(fid_in)
26 plot(fftshift(fft_fid_in))
27 show()
/usr/lib/python2.7/dist-packages/numpy/fft/fftpack.pyc in fft(a, n, axis)
162 """
163
--> 164 return _raw_fft(a, n, axis, fftpack.cffti, fftpack.cfftf, _fft_cache)
165
166
/usr/lib/python2.7/dist-packages/numpy/fft/fftpack.pyc in _raw_fft(a, n, axis, init_function, work_function, fft_cache)
43 def _raw_fft(a, n=None, axis=-1, init_function=fftpack.cffti,
44 work_function=fftpack.cfftf, fft_cache = _fft_cache ):
---> 45 a = asarray(a)
46
47 if n is None:
RuntimeError: maximum recursion depth exceeded
誰かがこれらの問題を回避するために私のコードを改善する方法を提案できますか?ありがとう。