Как я могу получить длину этого itertools.product () немедленно, потому что len (list ()) займет бесконечно много времени, чтобы сделать это? - PullRequest
0 голосов
/ 19 марта 2020
from itertools import product

p = np.random.randint(1,2,2)
p = product(p, repeat=50)

Я не знаю, как получить длину P сразу

Ответы [ 2 ]

0 голосов
/ 19 марта 2020

Это простая комбинаторика, а не программирование. Существует a**n способ выбрать любое из a значений n раз (повторение разрешено). В вашем случае a равно len(p) (исходный p, массив) или 2 (поскольку вы сгенерировали массив с двумя значениями), а n равно 50, поэтому получите 2**50 или 1125899906842624 получаются из ваших product, если у вас есть много времени для их итерации.

Теперь, если вы ищете, сколько различных значений вы получите, Ответ еще проще (хотя и неуловимо). Там когда-либо генерируется только одно отдельное значение, кортеж из 50. Это потому, что вы берете продукты из массива, который содержит только значение 1, и ничего больше, поскольку numpy.random.randint(1, 2) только дает вам 1 (верхняя граница исключена).

0 голосов
/ 19 марта 2020

Итератор продукта будет иметь столько элементов, сколько длины всех передаваемых вами итераций, умноженные друг на друга.
Вы передаете одну итерацию, но повторяете ее 50 раз. Поэтому вы должны умножить длину p 50 раз друг на друга. Это в основном len(p)**50.

...