import numpy as np #pythran export binning_fixed(float64[:,:], float64[:], float64) def binning_fixed(mzs, bins, binsize): bin_chunks = np.array_split(bins, 100) spectrum = [] for i,bin_chunk in enumerate(bin_chunks): min_bin = np.min(bin_chunk) max_bin = np.max(bin_chunk) ind = np.logical_and(mzs[:,0]>=min_bin,mzs[:,0]=1: mz_s = mzs[:,0][ind] counts =mzs[:,1][ind].astype(int) ind_mz_indices = np.digitize(mz_s, bin_chunk) populated_bins = np.unique(ind_mz_indices) ind_mz_indices-=1 populated_bins-=1 temp_spectrum = np.empty((len(bin_chunk),2)) temp_spectrum[:,0] = bin_chunk temp_spectrum[:,1] = np.zeros(len(bin_chunk)) for bin_no in populated_bins: mz = bin_chunk[bin_no]+binsize/2 ind = (ind_mz_indices == bin_no) temp_sum_counts = int(np.sum(counts[ind])) temp_spectrum[bin_no][1] = int(temp_sum_counts) temp_spectrum[:,0] = bin_chunk+binsize/2 spectrum.append(temp_spectrum) else: next spectrum_stacked = np.vstack(spectrum) return spectrum_stacked