Самый быстрый способ выборки множества случайных перестановок массива numpy ⇐ Python

Программы на Python
Anonymous
Самый быстрый способ выборки множества случайных перестановок массива numpy

Сообщение Anonymous »

В отличие от многих других функций numpy/random, numpy.random.Generator.permutation() не предоставляет очевидного способа вернуть несколько результатов за один вызов функции. Учитывая (1d) массив x, я хочу выбрать n перестановок x (каждая длиной len(x)) и получить результат в виде массива numpy с формой ( п, лен(х)). Наивный способ создания множества перестановок — это np.array([rng.permutation(x) for _ in range(n)]). Это не идеально, главным образом потому, что цикл выполняется на Python, а не внутри скомпилированной функции numpy.

Код: Выделить всё

import numpy as np

rng = np.random.default_rng(1234)
# x is big enough to not want to enumerate all permutations
x = rng.standard_normal(size=20)
n = 10000
perms = np.array([rng.permutation(x) for _ in range(n)])
Мой вариант использования — поиск методом грубой силы для поиска перестановок, которые минимизируют определенное свойство (составляя «достаточно хорошее» решение поиска). Я могу вычислить интересующее свойство для каждой перестановки, используя числовые операции, которые хорошо векторизируют/транслируют результирующую матрицу перестановок. Оказывается, узкое место в моем коде — наивная генерация матрицы перестановок. Есть ли лучший способ?


Подробнее здесь: https://stackoverflow.com/questions/706 ... umpy-array

Вернуться в «Python»