Changeset 317
- Timestamp:
- 11/11/08 11:16:35 (2 months ago)
- Files:
-
- trunk/src/signals.py (modified) (6 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/src/signals.py
r315 r317 312 312 return numpy.nan 313 313 314 315 316 314 def cv_kl(self, bins=100): 317 315 """ … … 326 324 http://incm.cnrs-mrs.fr/LaurentPerrinet/Publications/Voges08fens 327 325 328 329 Examples: 330 >> spklist.cv_kl() 326 Inputs: 327 bins - the number of bins used to gather the ISI 328 329 Examples: 330 >> spklist.cv_kl(100) 331 331 0.98 332 332 … … 336 336 """ 337 337 isi = self.isi() / 1000. 338 if newnum: 339 proba_isi, xaxis = numpy.histogram(isi, bins=bins, normed=True, new=True) 340 #xaxis = xaxis[:len(xaxis)-1] 341 else: 342 proba_isi, xaxis = numpy.histogram(isi, bins=bins, normed=True) 343 344 proba_isi /= numpy.sum(proba_isi) 345 bin_size = xaxis[1]-xaxis[0] 346 347 # differential entropy: http://en.wikipedia.org/wiki/Differential_entropy 348 KL = - numpy.sum(proba_isi * numpy.log(proba_isi+1e-16)) + numpy.log(bin_size) 349 KL -= -numpy.log(self.mean_rate()) + 1. 350 CVkl=numpy.exp(-KL) 351 352 return CVkl 338 if len(isi) == 0: 339 logging.debug("Warning, a CV can't be computed because there are not enough spikes") 340 return numpy.nan 341 else: 342 if newnum: 343 proba_isi, xaxis = numpy.histogram(isi, bins=bins, normed=True, new=True) 344 #xaxis = xaxis[:len(xaxis)-1] 345 else: 346 proba_isi, xaxis = numpy.histogram(isi, bins=bins, normed=True) 347 proba_isi /= numpy.sum(proba_isi) 348 bin_size = xaxis[1]-xaxis[0] 349 # differential entropy: http://en.wikipedia.org/wiki/Differential_entropy 350 KL = - numpy.sum(proba_isi * numpy.log(proba_isi+1e-16)) + numpy.log(bin_size) 351 KL -= -numpy.log(self.mean_rate()) + 1. 352 CVkl=numpy.exp(-KL) 353 return CVkl 353 354 354 355 … … 1186 1187 1187 1188 """ 1188 cvs_isi = numpy.empty(len(self.id_list())) 1189 for id in self.id_list(): 1190 cvs_isi[id] = self.spiketrains[id].cv_isi() 1189 ids = self.id_list() 1190 N = len(ids) 1191 cvs_isi = numpy.empty(N) 1192 for idx in xrange(N): 1193 cvs_isi[idx] = self.spiketrains[ids[idx]].cv_isi() 1191 1194 1192 1195 if float_only: … … 1195 1198 1196 1199 1197 def cv_kl(self, bins = 50 ):1200 def cv_kl(self, bins = 50, float_only=False): 1198 1201 """ 1199 1202 Return the list of all the CV coefficients for each SpikeTrains object 1200 1203 within the SpikeList. 1201 1204 1205 Inputs: 1206 bins - The number of bins used to gathered the ISI 1207 float_only - False by default. If true, NaN values are automatically 1208 removed 1209 1210 Examples: 1211 >> spklit.cv_kl(50) 1212 [0.4, Nan, 0.9, nan] 1213 >> spklist.cv_kl(50, True) 1214 [0.4, 0.9] 1215 1202 1216 See also: 1203 1217 cv_isi_hist, cv_local, cv_isi, SpikeTrain.cv_kl 1204 1218 1205 1219 """ 1206 cvs_kl = numpy.empty(len(self.id_list())) 1207 for id in self.id_list(): 1208 cvs_kl[id] = self.spiketrains[id].cv_kl(bins = bins) 1220 ids = self.id_list() 1221 N = len(ids) 1222 cvs_kl = numpy.empty(N) 1223 for idx in xrange(N): 1224 cvs_kl[idx] = self.spiketrains[ids[idx]].cv_kl(bins = bins) 1225 1226 if float_only: 1227 cvs_kl = numpy.extract(numpy.logical_not(numpy.isnan(cvs_kl)),cvs_kl) 1209 1228 return cvs_kl 1210 1229 … … 1227 1246 cv_isi, cv_local, cv_kl 1228 1247 """ 1229 isi= self.cv_isi(float_only=True)1248 cvs = self.cv_isi(float_only=True) 1230 1249 if newnum: 1231 1250 values, xaxis = numpy.histogram(cvs, bins=bins, normed=True, new=newnum)

