Я вычисляю гистограммы перистимульного времени (PSTH) на Python. В каждом испытании всплески выравниваются по временной метке начала достижения и группируются в интервалы фиксированной ширины. Я вижу вертикальные «пробелы» (низкие значения) на точных границах интервалов (например, каждые 20 мс). Я думал, что это числа с плавающей запятой, поэтому преобразовал все в целые числа и даже попробовал микросекунды + полуоткрытые ячейки, но полосы остались.
Minimal example (synthetic data that reproduces the effect on my machine):
import numpy as np
# ---- synthetic spikes: uniform + weak locking every 20 ms ----
rng = np.random.default_rng(0)
n_trials = 200
pre_s, post_s, bw_s = 1.0, 4.0, 0.02 # 20 ms
TICK = 1_000_000 # microseconds
pre, post, bw = int(pre_s*TICK), int(post_s*TICK), int(bw_s*TICK)
edges_rel = np.arange(-pre, post+1, bw, dtype=np.int64)
# trial starts (ms), here zeros for simplicity
reach_ticks = np.zeros(n_trials, dtype=np.int64)
# build spikes per trial with slight bin-boundary bias
spike_ticks = []
for _ in range(n_trials):
# uniform spikes
base = rng.integers(-pre, post, size=300)
# add a few spikes perturbed around multiples of 20 ms
lock = (np.arange(-pre, post, 20_000) + rng.integers(-200, 200, size=(pre+post)//20_000))
spikes = np.concatenate([base, lock])
spikes.sort()
spike_ticks.append(spikes)
# histogram per trial (half-open [left,right) bins)
H = []
for rs, rels in zip(reach_ticks, spike_ticks):
edges_abs = rs + edges_rel
h, _ = np.histogram(rels, bins=edges_abs)
H.append(h)
H = np.asarray(H, float) / bw_s # Hz
# show that the middle bin near -0.5 s dips relative to neighbors
centers = (edges_rel[:-1] + edges_rel[1:])/(2*TICK)
mid = np.argmin(np.abs(centers + 0.5))
print("Means around -0.5s:", H.mean(0)[mid-1:mid+2])
enter image description here
Подробнее здесь: https://stackoverflow.com/questions/798 ... -after-int
PSTH с numpy.histogram показывает периодические «пробелы» на границах интервалов даже после целочисленного преобразовани ⇐ Python
Программы на Python
1763177475
Anonymous
Я вычисляю гистограммы перистимульного времени (PSTH) на Python. В каждом испытании всплески выравниваются по временной метке начала достижения и группируются в интервалы фиксированной ширины. Я вижу вертикальные «пробелы» (низкие значения) на точных границах интервалов (например, каждые 20 мс). Я думал, что это числа с плавающей запятой, поэтому преобразовал все в целые числа и даже попробовал микросекунды + полуоткрытые ячейки, но полосы остались.
Minimal example (synthetic data that reproduces the effect on my machine):
import numpy as np
# ---- synthetic spikes: uniform + weak locking every 20 ms ----
rng = np.random.default_rng(0)
n_trials = 200
pre_s, post_s, bw_s = 1.0, 4.0, 0.02 # 20 ms
TICK = 1_000_000 # microseconds
pre, post, bw = int(pre_s*TICK), int(post_s*TICK), int(bw_s*TICK)
edges_rel = np.arange(-pre, post+1, bw, dtype=np.int64)
# trial starts (ms), here zeros for simplicity
reach_ticks = np.zeros(n_trials, dtype=np.int64)
# build spikes per trial with slight bin-boundary bias
spike_ticks = []
for _ in range(n_trials):
# uniform spikes
base = rng.integers(-pre, post, size=300)
# add a few spikes perturbed around multiples of 20 ms
lock = (np.arange(-pre, post, 20_000) + rng.integers(-200, 200, size=(pre+post)//20_000))
spikes = np.concatenate([base, lock])
spikes.sort()
spike_ticks.append(spikes)
# histogram per trial (half-open [left,right) bins)
H = []
for rs, rels in zip(reach_ticks, spike_ticks):
edges_abs = rs + edges_rel
h, _ = np.histogram(rels, bins=edges_abs)
H.append(h)
H = np.asarray(H, float) / bw_s # Hz
# show that the middle bin near -0.5 s dips relative to neighbors
centers = (edges_rel[:-1] + edges_rel[1:])/(2*TICK)
mid = np.argmin(np.abs(centers + 0.5))
print("Means around -0.5s:", H.mean(0)[mid-1:mid+2])
enter image description here
Подробнее здесь: [url]https://stackoverflow.com/questions/79820556/psth-with-numpy-histogram-shows-periodic-gaps-at-bin-boundaries-even-after-int[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия