2013-05-15 2 views
0

파이썬에서 데이터 집합에 대한 간단한 매치 필터링 작업을 시도하고 있습니다. (그래서 컨볼루션 컨볼루션을 시도했습니다.) 그러나 회선 함수 object too deep for desired array에 오류 메시지가 표시됩니다. 하나 vlt 또는 mfilt가없는 경우파이썬에서의 매치 필터링

mfilt1=np.convolve(vlt,mfilt,mode='full') 

은 당신이 오류가 발생합니다 :이 줄 수 있도록

import numpy as np 
import cPickle 
import matplotlib.pyplot as plt 

with open('meteor2.pkl', 'rb') as f:  
    data = cPickle.load(f) 
    vlt = data['vlt'] 
    mfilt=np.conjugate(vlt) 
    mfilt1=np.convolve(vlt,mfilt,mode='full') 
    #mfilt=np.conjugate(vlt) 
    #mfilt1=np.convolve(vlt,mfilt,'same') 
    r = data['r'] 
    t = data['t'] 
    codes = data['codes'] 
    freqs = data['freqs'] 
    ch0_db = 10*np.log10(np.abs(mfilt1[:, 0, :])**2) 
    plt.figure() 
    plt.imshow(ch0_db.T, vmin=0, origin='lower', cmap=plt.cm.coolwarm,aspect='auto') 
    plt.title('All pulses') 
    plt.figure() 
    plt.imshow(ch0_db[3::5, :].T, vmin=0, origin='lower', cmap=plt.cm.coolwarm,aspect='auto') 
    plt.title('Minimum sidelobe coded-pulses') 
    plt.show() 
+4

이 게시물 깨진 들여 쓰기 시작을하고, 편집은 정확하게 문제를 해결하지 않았습니다. 제출 한 코드를 다시보고 수정하여 실제 실행중인 내용과 일치하는지 확인하십시오. – Cairnarvon

+0

@Cairnarvon이 제안한대로 코드를 수정한다고 가정하고 오류를 재생산하고 더 나은 디버그를 수행 할 수있는 최소한의 데이터 집합 (잘하면 임의의 numpy 배열)을 추가하십시오. – fgb

답변

1

np.convolve한 차원 컨볼 루션을 수행합니다 아래는 내가 사용 코드입니다 1-D. 예 :

In [12]: x = np.array([[1,2,3]]) # x is 2-D 

In [13]: y = np.array([1,2,3]) 

In [14]: np.convolve(x, y, mode='full') 
--------------------------------------------------------------------------- 
ValueError        Traceback (most recent call last) 
<ipython-input-14-9bf37a14877a> in <module>() 
----> 1 np.convolve(x, y, mode='full') 

/home/warren/anaconda/lib/python2.7/site-packages/numpy/core/numeric.pyc in convolve(a, v, mode) 
    822   raise ValueError('v cannot be empty') 
    823  mode = _mode_from_name(mode) 
--> 824  return multiarray.correlate(a, v[::-1], mode) 
    825 
    826 def outer(a,b): 

ValueError: object too deep for desired array 

2 차원 이상을 원하는 것처럼 보입니다. scipy 몇 가지 옵션이 있습니다