Декартово произведение рядов очень большого массива - PullRequest
0 голосов
/ 31 мая 2019

У меня есть массив размером (100, 50) .Мне нужно сгенерировать выходной массив, который представляет собой декартово произведение строк входного массива.

Для упрощения, давайте иметь входной массив:

array([[2, 6, 5],
       [7, 3, 6]])

В качестве вывода я хотел бы иметь:

array([[2, 7],
       [2, 3],
       [2, 6],
       [6, 7],
       [6, 3],
       [6, 6],
       [5, 7],
       [5, 3],
       [5, 6]])

Примечание: itertools.product здесь не работает из-за размера входного вектора.Также все другие подобные ответы, предполагают количество строк меньше 32, что здесь не так

Ответы [ 2 ]

1 голос
/ 31 мая 2019

Этот вопрос задавался много раз, например здесь .
Массив размером (100, 50) слишком велик и не может быть обработан с помощью numpy. Тем не менее, меньший размер массива может быть решен. В любом случае, я предпочитаю использовать itertools для такого рода вещей:

import itertools

a = np.array([[2, 6, 5], [7, 3, 6]])

np.array(list(itertools.product(*a)))
array([[2, 7],
       [2, 3],
       [2, 6],
       [6, 7],
       [6, 3],
       [6, 6],
       [5, 7],
       [5, 3],
       [5, 6]])
0 голосов
/ 31 мая 2019
a = np.array([[2, 6, 5],[7, 3, 6]])

out = np.array(np.meshgrid(a[0], a[1])).T.reshape(-1,2)
print(out)

"""
prints
[[2 7]
 [2 3]
 [2 6]
 [6 7]
 [6 3]
 [6 6]
 [5 7]
 [5 3]
 [5 6]]
"""
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...