Как я могу сохранить формы массивов, когда я использую numpy concatenate или numpy append - PullRequest
0 голосов
/ 24 февраля 2019

У меня было 3 списка и я превратил их в ndarray.

o_a = [1,2,3,4,5]            
o_b = [2,4,6,8,10]
o_c = [11,22,33,44,55]
np_a = np.array(o_a)
np_b = np.array(o_b)
np_c = np.array(o_c)
print(np_a)
print(np_b)
print(np_c)

[1 2 3 4 5]
[ 2  4  6  8 10]
[11 22 33 44 55]

, когда я использую vstack, чтобы присоединиться к ним, их форма не свернута

np.vstack((np_a,np_b))    
array([[ 1,  2,  3,  4,  5],
       [ 2,  4,  6,  8, 10]])

, но если я использую concatenate илидобавьте, чтобы объединить их, это просто стало 1darray

np.concatenate((np_a,np_b))
array([ 1,  2,  3,  4,  5,  2,  4,  6,  8, 10])

Есть ли способ, которым массивы могут сохранить форму?не использовать изменение формы после работы.

1 Ответ

0 голосов
/ 24 февраля 2019

Использование numpy.concatenate() или numpy.append():

np.concatenate((np_a[None,:],np_b[None,:]), axis=0)

или

np.append(np_a[None,:],np_b[None,:], axis=0)

Выход (в любом случае):

array([[ 1,  2,  3,  4,  5],
       [ 2,  4,  6,  8, 10]])

Теперь мы преобразуем каждый массив в массив 2-й, прежде чем объединять их оба.

И, объединяя или добавляя их, мы указываем, что объединение или добавление должно происходить вдоль axis=0 (первая ось) входных массивов.

Обратите внимание, что numpy.concatenate() и numpy.append() не создают никакого нового измерения.Они просто объединяются или добавляются вдоль существующего измерения, когда вы явно указываете аргумент axis.

Если мы не указываем аргумент axis, поведение по умолчанию numpy.concatenate() и numpy.append(),состоит в том, чтобы сгладить входные массивы, а также вернуть уплощенный массив.


Использование numpy.stack ():

np.stack ((np_a, np_b))

Это также дает:1035 *

array([[ 1,  2,  3,  4,  5],
       [ 2,  4,  6,  8, 10]])

Здесь нам не нужно предварительно преобразовывать в 2-й.Новое измерение будет создано самой операцией стека.

Обратите внимание, что numpy.stack() также принимает аргумент axis, но по умолчанию он равен 0, что нам и нужно.

Такжеобратите внимание, что в случае numpy.stack() значение, которое мы указываем для аргумента axis, относится к массиву результатов (который имеет одно дополнительное измерение), а не к исходным входным массивам.

...