эквивалент NumPy itertools.product()
равен numpy.indices()
, но он только даст вам произведение диапазонов формы 0, ..., k-1:
numpy.rollaxis(numpy.indices((2, 3, 3)), 0, 4)
array([[[[0, 0, 0],
[0, 0, 1],
[0, 0, 2]],
[[0, 1, 0],
[0, 1, 1],
[0, 1, 2]],
[[0, 2, 0],
[0, 2, 1],
[0, 2, 2]]],
[[[1, 0, 0],
[1, 0, 1],
[1, 0, 2]],
[[1, 1, 0],
[1, 1, 1],
[1, 1, 2]],
[[1, 2, 0],
[1, 2, 1],
[1, 2, 2]]]])
. Для вашего в специальном случае вы можете использовать
a = numpy.indices((4,)*13)
b = 1j ** numpy.rollaxis(a, 0, 14)
(это не будет работать в 32-битной системе, потому что массив будет большим. Экстраполируя размер, который я могу проверить, он должен работать меньше, чем хотя.)
EIDT: просто упомянуть об этом: вызов numpy.rollaxis()
более или менее косметический, чтобы получить тот же результат, что и itertools.product()
. Если вы не заботитесь о порядке индексов, вы можете просто опустить его (но он все равно дешев, если у вас нет никаких последующих действий, которые преобразуют ваш массив в смежный массив.)
EDIT2: Чтобы получить точный аналог
numpy.array(list(itertools.product(some_list, repeat=some_length)))
, вы можете использовать
numpy.array(some_list)[numpy.rollaxis(
numpy.indices((len(some_list),) * some_length), 0, some_length + 1)
.reshape(-1, some_length)]
. Это стало совершенно нечитаемым - просто скажите, нужно ли мне это объяснять далее:)
Вы экспортировали в файл send_mail.js
? Вы должны экспортировать любую функцию, которую хотите использовать повторно. И используйте импорт там, где вам это нужно. Вместо того, чтобы требовать. Для справки: MDN
Я понял, что моя проблема связана с "циклическими зависимостями" между моими файлами маршрутов. Это своего рода ошибка дизайна. И есть вопрос / решение о переполнении стека: как справляться с циклическими зависимостями в узле js