Это дорогостоящая операция np.array(list(combinations(n_lst,2)),dtype=int)
, потому что python должен сканировать каждого члена списка, проверять, является ли элемент «int-совместимым», преобразовывать его в целое число и сохранять в массиве.
Чтобы достичь непревзойденной производительности, вы должны продумать весь алгоритм в неповоротливом. Например:
In [63]: n_lst=list(range(100))
In [64]: %timeit twosum1(n_lst)
11.2 ms ± 1.64 ms per loop (mean ± std. dev. of 7 runs, 100 loops each)
In [65]: np.vstack(np.where(np.add.outer(n_lst,n_lst)==7)).T
Out[65]:
array([[0, 7],
[1, 6],
[2, 5],
[3, 4],
[4, 3],
[5, 2],
[6, 1],
[7, 0]], dtype=int64)
In [66]: %timeit np.vstack(np.where(np.add.outer(n_lst,n_lst)==7)).T
306 µs ± 19 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
Таким образом, вы выиграете фактор от 30 до 100, в зависимости от проблемы.
Редкая Математика утверждает, что прошла Несгибаемые тесты. Это так надежно, как я знаю.
Можно всегда быть ученым и повторно выполнять те тесты для себя как независимая проверка.
Хороший вопрос ;)
Все алгоритмы RNG являются известными алгоритмами, изобретенными людьми, более умными, чем я. Я - программист, не математик. Я только что портировал исходный C код. Таким образом, необходимо надеяться, что я не представил ошибок в преобразовании.
Как с большей частью программного обеспечения с открытым исходным кодом, нет НИКАКОЙ ГАРАНТИИ. Если Вы хотите использовать его для моделирований, я думаю, что это - очень хороший выбор. Если бы Вы хотите использовать его для криптографии, что-то как Fortuna было бы лучше.
Математика несвободного городского населения не используется так широко как некоторые библиотеки. Это добирается между 5 и 20 загрузками в неделю. Я не знаю, сколько из тех на самом деле продолжает использовать его в серьезных приложениях. Я использую его для эволюционного вычисления и нескольких тривиальных связанных с покером программ, с которыми я играл.
Я выполнил Консерватора на каждой из реализаций RNG, и она не выделяет дефектов. Тем не менее результаты Консерватора не является самым легким интерпретировать:
Таким образом Вы не должны быть удивлены случайными p-значениями около 0 или 1, такой как.0012 или.9983. Когда немного потока действительно ПЕРЕСТАНЕТ РАБОТАТЬ БОЛЬШОЙ, Вы получите p
s of 0 or 1 to six or more places. By all means, do not, as a Statistician might, think that a p < .025 or p> .975 means that the RNG has "failed the test at the .05 level". Such p
s происходят среди сотен того КОНСЕРВАТОРА, производит, даже с хорошим RNGs. Поэтому имейте в виду, что "p происходит".
Математика Несвободного городского населения RNGs все удовлетворяют это нечеткое определение успеха. Вне 0.025 существуют одно или два p-значения.. 0,975 диапазона, но ни один, что "приводят к сбою большой". Это сопоставимо с результатами, полученными с SecureRandom Java (и лучше, чем java.util. Случайный, который действительно "перестал работать большой").
Если Вы хотите протестировать это на себя, существует класс под названием DiehardInputGenerator в распределении. Это генерирует файл 12 МБ, что необходимо выполнить Консерватора.
Запишите свои собственные тесты.
Основная проверка генератора случайных чисел может быть сделана с помощью теста хи-квадрата