Чем стек numpy отличается от стека numpy v и h? - PullRequest
1 голос
/ 09 мая 2020

Я понимаю, что numpy hstack складывается по столбцам, а vstack - по строкам. Тогда какова функция стека numpy?

1 Ответ

1 голос
/ 12 мая 2020

Ключевое отличие содержится в документации для np.stack (выделено мной):

Присоединение к последовательности массивов вдоль оси new .

Рассмотрим следующие массивы:

arr1=np.array([[1,2,3],[7,8,9]])
arr2=np.array([[4,5,6],[10,11,12]])
arr3=np.array([['a','b','c'],['d','e','f']])

[[1 2 3]
 [7 8 9]]

[[ 4  5  6]
 [10 11 12]]

[['a' 'b' 'c']
 ['d' 'e' 'f']]

Затем рассмотрим следующие результаты:

#stack horizontally on existing axis
np.hstack([arr1,arr2,arr3])

array([['1', '2', '3', '4', '5', '6', 'a', 'b', 'c'],
       ['7', '8', '9', '10', '11', '12', 'd', 'e', 'f']], dtype='<U11')

shape: (2, 9)

#stack vertically on existing axis
np.vstack([arr1,arr2,arr3])

array([['1', '2', '3'],
       ['7', '8', '9'],
       ['4', '5', '6'],
       ['10', '11', '12'],
       ['a', 'b', 'c'],
       ['d', 'e', 'f']], dtype='<U11')

shape: (6, 3)

#stack depth-wise, adding an axis 2
np.dstack([arr1,arr2,arr3])

array([[['1', '4', 'a'],
        ['2', '5', 'b'],
        ['3', '6', 'c']],

       [['7', '10', 'd'],
        ['8', '11', 'e'],
        ['9', '12', 'f']]], dtype='<U11')

shape: (2, 3, 3)

Обратите внимание, что во всех случаях, кроме dstack, два массива объединяются по существующему ось (ось 0, ось 1 и dstack добавляет новую ось 2)

Затем, в свете приведенных выше результатов, что, если мы используем stack вместо этого, изменяя только ось стека?

for i in [0,1,2]:
    stacked=np.stack([arr1,arr2,arr3],axis=i)
    print(f'Stacked on axis {i}\n',stacked, '\n',f'array shape:{stacked.shape}','\n')

Stacked on axis 0
 [[['1' '2' '3']
  ['7' '8' '9']]

 [['4' '5' '6']
  ['10' '11' '12']]

 [['a' 'b' 'c']
  ['d' 'e' 'f']]] 
 array shape:(3, 2, 3) 

Stacked on axis 1
 [[['1' '2' '3']
  ['4' '5' '6']
  ['a' 'b' 'c']]

 [['7' '8' '9']
  ['10' '11' '12']
  ['d' 'e' 'f']]] 
 array shape:(2, 3, 3) 

Stacked on axis 2
 [[['1' '4' 'a']
  ['2' '5' 'b']
  ['3' '6' 'c']]

 [['7' '10' 'd']
  ['8' '11' 'e']
  ['9' '12' 'f']]] 
 array shape:(2, 3, 3)

Обратите внимание, что это все трехмерные массивы, только порядок элементов изменяется в зависимости от направления, в котором они расположены

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...