Вы неправильно обрабатываете случай |x| > 1/6
, возможно, скорее из-за неправильного понимания математики, чем из-за неправильного понимания кода. Выражение
0.5 * np.random.normal(1, 1/9) + 0.5 * np.random.normal(-1, 1/9)
дает нормальное распределение с центром в нуле, не бимодальное распределение с центрами в -1 и 1.
Исправление становится очевидным, если вы лучше поняли математику: замените оскорбительный расчет на что-то вроде
np.random.normal(1.0, 1.0/9.0) if np.random.random() > 0.5 else np.random.normal(-1.0, 1.0/9.0)
(1/9
оценивается в 0 в Python2 , который я использовал для тестирования.)