Как сгенерировать подсчет «векторного пространства» заданного измерения, по модулю некоторого целого числа

В вашей первой строке отсутствуют котировки вокруг http:

var http = require('http');
0
задан L. B. 6 March 2019 в 17:24
поделиться

3 ответа

Если по какой-то причине вам нужна вся таблица, вы можете использовать uint8 dtype и упрощенную версию этого декартового кода продукта .

import numpy as np
from itertools import chain, repeat, accumulate

def cartesian_power(N, D):
    dtype = f'u{2**(((N-1).bit_length() + 7) // 8 - 1).bit_length()}'
    arr = np.empty((*repeat(N, D), D), dtype=dtype)
    arrs = *accumulate(chain((arr,), repeat(0, D)), np.ndarray.__getitem__),
    rng = np.arange(N, dtype=dtype)
    idx = slice(None), *repeat(None, D-1)
    for i in range(D-1, 0, -1):
        arrs[i][..., i] = rng[idx[:D-i]]
        arrs[i-1][1:] = arrs[i]
    arr[..., 0] = rng[idx]
    return arr.reshape(-1, D)

16 ^ 7 не проблема с этой функцией на моем ноутбуке 8 ГБ:

>>> cartesian_power(16, 7)
array([[ 0,  0,  0, ...,  0,  0,  0],
       [ 0,  0,  0, ...,  0,  0,  1],
       [ 0,  0,  0, ...,  0,  0,  2],
       ...,
       [15, 15, 15, ..., 15, 15, 13],
       [15, 15, 15, ..., 15, 15, 14],
       [15, 15, 15, ..., 15, 15, 15]], dtype=uint8)
0
ответ дан Paul Panzer 6 March 2019 в 17:24
поделиться

Вы можете использовать продукт из пакета itertools для создания объекта генератора

from itertools import product
x = [0, 1, 2, 3, 4]
a = product(x, repeat=2)
#next(a) will print (0, 0) and so on until it's exhausted
0
ответ дан mamun 6 March 2019 в 17:24
поделиться

Пока вы хотите сохранить все числа в списке, это неэффективно для памяти. Посмотрите на расчет, чтобы понять, как он потребляет память.

Dimension = 7, N = 16
Total numbers generated = 16*16*...*16 (7 times) = 268435456
No. of elements used to represent a number = 7
Total numbers used = 268435456*7 = 268435456
Size used to represent an int in Python2 = 24 bytes
Total memory consumption = 268435456*24 = 6442450944 bytes = 6GB + Extra Overhead of each lists and lists of lists.

ссылка

Вместо генерации всей последовательности вы можете создать генератор, как предложено @mamun, но итерация по нему будет очень трудоемкой.

0
ответ дан Raj 6 March 2019 в 17:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: