Я сгенерировал огромное количество случайных данных, например:
ndata = np.random.binomial(1, 0.25, (100000, 1000))
, то есть матрица 100 000 на 1000 (!)
Я генерирую новую матрицу, где для каждого строка, каждый столбец является истинным, если среднее значение всех столбцов заранее (за вычетом ожидаемой величины Бернулли Р.В. с р = 0,25) больше, чем равно некоторому эпсилону.
примерно так:
def true_false_inequality(data, eps, data_len):
return [abs(np.mean(data[:index + 1]) - 0.25) >= eps for index in range(data_len)]
После этого я создаю 1-й массив (наконец-то!), Где каждый столбец представляет, сколько истинных значений у меня было в одном столбце в матрице, а затем я делю каждый столбец на некоторое число (exp_numer = 100,000 )
def final_res(data, eps):
tf = np.array([true_false_inequality(data[seq], eps, data_len) for seq in range(exp_number)])
percentage = tf.sum(axis=0)/exp_number
return percentage
Также у меня есть 5 разных эпсилонов, которые я повторяю, чтобы получить мой окончательный результат 5 раз. (epsilons = [0,001, 0,1, 0,5, 0,25, 0,025])
Мой код работает , но это занимает много времени для 100 000 строк на 1000 столбцов, я знаю, что могу сделать это быстрее благодаря использованию функции numpy немного больше, но я просто не знаю как.