Вы можете использовать пакет openopt и его метод NLP. Он имеет множество алгоритмов динамического программирования для решения нелинейных алгебраических уравнений, состоящих из: goldenSection, scipy_fminbound, scipy_bfgs, scipy_cg, scipy_ncg, amsg2p, scipy_lbfgsb, scipy_tnc, bobyqa, ralg, ipopt, scipy_slsqp, scipy_cobyla, lincher, algencan, из которых вы можете выбрать. Некоторые из последних алгоритмов могут решить проблему ограниченного нелинейного программирования. Итак, вы можете ввести свою систему уравнений в openopt.NLP () с помощью такой функции:
lambda x: x[0] + x[1]**2 - 4, np.exp(x[0]) + x[0]*x[1]
Возможно, поздно, но это ценность для упоминания этого решения, потому что я думаю самый простой способ сделать так:
a = [1,4,1,3,3,2,1,4]
n = len(a)
idx = np.random.choice(list(range(n)), p=np.ones(n)/n)
Это означает, что Вы выбор из индексов однородно. В более общем случае можно сделать взвешенную выборку (и возвратить индекс), таким образом:
probs = [.3, .4, .2, 0, .1]
n = len(a)
idx = np.random.choice(list(range(n)), p=probs)
, Если бы Вы пытаетесь сделать так для так много раз (например, 1e5), гистограмма выбранных индексов была бы похожа [0.30126 0.39817 0.19986 0. 0.10071]
в этом случае, который корректен.
Так или иначе, необходимо выбрать из индексов и использовать значения (если Вам нужно) как их вероятности.