У меня есть массив размером (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 ответа
Этот вопрос задавался много раз, например здесь.
Массив размером (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]])
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]]
"""
Похожие вопросы
Новые вопросы
python
Python - это многопарадигмальный, динамически типизированный, многоцелевой язык программирования. Он разработан для быстрого изучения, понимания и использования, а также для обеспечения чистого и единообразного синтаксиса. Обратите внимание, что Python 2 официально не поддерживается с 01.01.2020. Тем не менее, для вопросов о Python, связанных с версией, добавьте тег [python-2.7] или [python-3.x]. При использовании варианта Python (например, Jython, PyPy) или библиотеки (например, Pandas и NumPy) включите его в теги.