0

我正在尝试对python中的数据集进行简单的匹配过滤操作(所以我尝试先进行共轭然后进行卷积)。但是,卷积函数中显示了一条错误消息,即object too deep for desired array. 下面是我正在使用的代码:

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

1 回答 1

1

np.convolve一维卷积,所以在这一行:

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

如果要么不是一维,你就会得到那个vlt错误mfilt。例如,

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

看起来您想要二维(或更高)卷积。 scipy有几个选项:

于 2013-05-15T12:04:19.537 回答