scipy 使用高斯滤波对1D数组进行卷积返回全零数组Python

w8ntj3qf  于 8个月前  发布在  Python
关注(0)|答案(1)|浏览(65)

我试图采取1和0的一维数组(主要是零)和卷积它与高斯得到一个更概率的表示。当我使用scipy.ndimage.gaussian_filter1d时,我总是得到满是零的数组。

spike_bins, _ = np.histogram(spike_times, 
                                 bins=np.linspace(start_time, end_time, bin_number))
    ### CONVOLVE ##

    #spike_bins_convolved = gaussian_filter1d(spike_bins, 1, mode = 'constant')
    #print(spike_bins_convolved)
    #print(np.sum(spike_bins_convolved))
    
    ###############
    
    spike_bins.reshape(1, -1) #single sample 
    
    ####### TRYING IT AFTER THIS STEP INSTEAD #######
   
    spike_bins_convolved = gaussian_filter1d(spike_bins, 1, mode = 'constant')
    print(np.sum(spike_bins_convolved))

这是我上面的代码,我试着在两个不同的地方运行它,看到它在两个地方都返回了一个全零的数组,即使输入数组不全是零。

gkl3eglg

gkl3eglg1#

问题是gaussian_filter1d()返回与参数相同dtype的数组。如果你传递给它一个整数数组,它会给予你一个整数数组,即使这需要将每个值舍入为零。
解决方案是将计数转换为浮点数,它可以处理非整数值。你可以用spike_bins.astype('float64')来实现。
此问题的示例:

import scipy.ndimage
import numpy as np
spike_bins, _ = np.histogram([1, 2.5, 3.5], bins=[0, 1, 2, 3])
print(spike_bins)
print(spike_bins.dtype)
print(scipy.ndimage.gaussian_filter1d(spike_bins, 1, mode = 'constant'))
print(scipy.ndimage.gaussian_filter1d(spike_bins.astype('float64'), 1, mode = 'constant'))

如果gaussian_filter1d()的输入为整数dtype,则打印[0 0 0],但如果给定浮点dtype,则打印非零值。

相关问题