NumPy, объединить два массива различной формы - PullRequest
1 голос
/ 19 марта 2019

Для двух массивов a и b:

a = np.array([[1],[2],[3],[4]])

b = np.array(['a', 'b', 'c', 'd'])

Я хочу создать следующий массив

c = np.array([[1, 'a'], [2, 'b'], [3, 'c'], [4, 'd']])

Есть ли способ сделать это эффективно?

Ответы [ 3 ]

1 голос
/ 19 марта 2019

Решение

>>> import numpy as np
>>> a = np.array([[1],[2],[3],[4]])
>>> b = np.array(['a', 'b', 'c', 'd'])


# You have strange array so result is strange
>>> np.array([[a[i],b[i]] for i in range(a.shape[0])])
array([[array([1]), 'a'],
       [array([2]), 'b'],
       [array([3]), 'c'],
       [array([4]), 'd']], dtype=object)



# You want this

>>> np.array([[a[i][0],b[i]] for i in range(a.shape[0])])
array([['1', 'a'],
       ['2', 'b'],
       ['3', 'c'],
       ['4', 'd']], dtype='<U11')
>>>

Примечание:

Возможно, вы захотите изменить форму массива 'a'.

>>> a.shape
(4, 1)

>>> a
array([[1],
       [2],
       [3],
       [4]])

Измените это, чтобы упростить использование, в следующий раз ...

>>> a.reshape(4)
array([1, 2, 3, 4])
1 голос
/ 19 марта 2019

Вам нужно:

import numpy as np 

a = np.array([[1],[2],[3],[4]])

b = np.array(['a', 'b', 'c', 'd'])

print(np.array(list(zip(np.concatenate(a), b))))

Выход:

[[1, 'a'], [2, 'b'], [3, 'c'], [4, 'd']] 

Альтернативный раствор

print(np.stack((np.concatenate(a), b), axis=1))
0 голосов
/ 19 марта 2019

Вы можете сделать:

c = np.vstack((a.flatten(), b)).T
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...