Как объединить два массива numpy

У меня есть два массива numpy с формами (5741, 20000) и (5741, 11) соответственно. Как я могу объединить их в один массив формы (5741, 2), т.е. каждая строка вновь созданного массива должна содержать строку первого массива и строку второго массива ?!

Бывший:

A = [(1, 1),
     (2, 2),
     (3, 3)]

B = [(A),
     (B),
     (C)]

new_array = [((1, 1), (A)),
             ((2, 2), (B)),
             ((3, 3), (C))]

Уверен, что для этого есть 1000 дубликатов ..

rafaelc 03.05.2018 14:21
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
1
61
2

Ответы 2

Используйте numpy.hstack():

>>> A=np.array([[1,1],[2,2],[3,3]])

>>> B=np.array([[100],[200],[300]])

>>> np.hstack((A,B))
array([[  1,   1, 100],
       [  2,   2, 200],
       [  3,   3, 300]])

Примите ответ, если он является решением вашего вопроса. Спасибо!

fferri 05.05.2018 16:02
In [65]: A = np.arange(6).reshape(3,2)
In [66]: B = np.arange(3).reshape(3,1)

hstack или объединение по последнему измерению создает массив (n, 3)

In [67]: np.concatenate((A,B),axis=1)
Out[67]: 
array([[0, 1, 0],
       [2, 3, 1],
       [4, 5, 2]])

Сложнее создать массив, содержащий подмассивы разной длины. Хорошей отправной точкой является массив объектов желаемой формы:

In [68]: C = np.empty((3,2),dtype=object)
In [69]: C[:,0] = A
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-69-928e3f2975cf> in <module>()
----> 1 C[:,0] = A

ValueError: could not broadcast input array from shape (3,2) into shape (3)

Но даже при этом копирование массивов в слоты объектов может быть непростым делом. Копировать списки в слоты проще:

In [70]: C[:,0] = A.tolist()
In [71]: C[:,1] = B.tolist()
In [72]: C
Out[72]: 
array([[list([0, 1]), list([0])],
       [list([2, 3]), list([1])],
       [list([4, 5]), list([2])]], dtype=object)

Приложив немного больше усилий, я мог бы превратить это в массив массивов, а не в список. Или, может быть, массив кортежей?

Вы действительно понимаете, что будет включать в себя этот массив (n, 2)?

        [((1, 1), (A)),
         ((2, 2), (B)),
         ((3, 3), (C))]

Другой подход - это структурированный массив:

In [74]: D = np.empty(3, dtype=[('x',int,2), ('y',int)])
In [75]: D['x']=A
In [76]: D['y']=B
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-76-fbab1c580883> in <module>()
----> 1 D['y']=B

ValueError: could not broadcast input array from shape (3,1) into shape (3)
In [77]: D['y']=B.flat
In [78]: D
Out[78]: 
array([([0, 1], 0), ([2, 3], 1), ([4, 5], 2)],
      dtype=[('x', '<i8', (2,)), ('y', '<i8')])

Другой способ записи A и B в C:

In [81]: C[:,1]=B.ravel()
In [83]: for i in range(3): C[i,0]=A[i]
In [84]: C
Out[84]: 
array([[array([0, 1]), 0],
       [array([2, 3]), 1],
       [array([4, 5]), 2]], dtype=object)

или написание кортежей:

In [85]: for i in range(3): C[i,0]=tuple(A[i])
In [87]: for i in range(3): C[i,1]=tuple(B[i])
In [88]: C
Out[88]: 
array([[(0, 1), (0,)],
       [(2, 3), (1,)],
       [(4, 5), (2,)]], dtype=object)

Другие вопросы по теме