Проверьте, является ли массив столбцом большой матрицы - Python - PullRequest
0 голосов
/ 27 апреля 2018

Мой код должен проверить, является ли случайно сгенерированный массив столбцом большой матрицы в каждой итерации. Код выглядит так:

large_matrix=np.zeros((arr_size,loop_size))
flag = 0
while flag < loop_size:
    arr = arr_generator(arr_size)
    dist = np.sum(large_matrix-arr,axis=0)
    if 0 in dist:
        continue
    else:
        large_matrix[:,flag] = arr
        flag += 1

arr = двоичный , и потому что большой _matrix занимает много памяти . Этот кусок кода довольно медленный. Есть ли более эффективный метод для решения этой проблемы в numpy?

1 Ответ

0 голосов
/ 05 мая 2018

Для этого вопроса использование уникальности произведения простых чисел может быть хорошим способом решения проблемы. Чтобы использовать простые числа, нам нужно:

  1. массив, используемый для хранения простых чисел

  2. генератор массива, который может выдавать информацию об индексе различных видов элементов (поскольку массив в этом случае является двоичным, нам нужно знать только индекс одного типа элемента в массиве. )

  3. Чтобы исправить проблему переполнения, вызванную произведением простых чисел, нам нужно вычислить логарифм произведения:

Код переписывается следующим образом:

PRIME_NUMBER=np.array([2,3,5,7,11,13,17,23,29,31....], dtype='float')
flag = 0
loop_size = 100000
arr_size = 8
config = np.zeros(loop_size)
large_matrix=np.zeros((arr_size,loop_size))

while flag < loop_size:
    arr, idx = arr_generator(arr_size)
    prod = np.round(np.log10(np.prod(PRIME_NUMBER[idx])), 3)
    if prod in config:
        continue
    else:
        large_matrix[:,flag] = arr
        flag += 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...