Python соединить два numpy массива

How To Concatenate NumPy Arrays

How to concatenate NumPy arrays in Python? You can use the numpy.concatenate() function to concat, merge, or join a sequence of two or multiple arrays into a single NumPy array. Concatenation refers to putting the contents of two or more arrays in a single array. In Python NumPy, we can join arrays by axes (vertical or horizontal), whereas in SQL we join tables based on keys.

You can pass a sequence of arrays that you want to join to the concatenate() function, along with the axis. If the axis is not explicitly passed, it is taken as 0. In this article, I will explain how to concatenate NumPy arrays (ndarray) with examples by using functions like concatenate(), stack() , hstack() , vstack() , dstack() .

Note that in Python NumPy, ndarray is a multidimensional, homogeneous array of fixed-size items of the same type. You can create a ndarray object by using NumPy.array() .

1. Quick Examples of NumPy Concatenate Arrays

If you are in a hurry, below are some quick examples of how to merge two NumPy arrays. Alternatively, you can also use NumPy.append() function to append arrays.

Читайте также:  Html select option placeholder

Let’s see each of these with examples.

2. Concatenate NumPy Arrays

Use numpy.concatenate() to merge the content of two or multiple arrays into a single array. This function takes several arguments along with the NumPy arrays to concatenate and returns a Numpy array ndarray. Note that this method also takes axis as another argument, when not specified it defaults to 0.

Concatenation refers to putting the contents of two or more arrays in a single array. In Python NumPy, we can join arrays by axes (vertical or horizontal), whereas in SQL we join tables based on keys.

Yields below output. If you notice it just appends the elements from the second array to the first array and returns a new NumPy array.

3. Use numpy.concatenate() with axis=1

You can also concatenate two NumPy arrays column-wise by specifying axis=1. Now the resulting array is a wide matrix with more columns than rows. With axis=1 , it returns an array of arrays (Nested array).

Now let’s see how to merge nested NumPy arrays.

4. Use numpy.stack() Function to Join Arrays

Also, use numpy.stack() function to join a sequence of arrays along a new axis. You pass a sequence of arrays that you want to join to the numpy.stack() function along with the axis. If the axis is not explicitly passed it is taken as zero.

Yields below output. Since I used axis=1 it is concatenated on columns.

5. Use NumPy.hstack() Function

Similarly, you can also concatenate arrays horizontally in Python NumPy using hstack() function. The hstack() is used to stack the array horizontally.

6. Use NumPy.vstack() Function

You can use numpy.vstack() to stack arrays in sequence vertically.

7. Use numpy.dstack() Function to Concatenate Arrays

Use numpy.dstack() to stack along with the height, which is the same as depth.

Yields below output. This output is the same as using concatenate() with axis=1 .

8. Conclusion

In this article, I have explained how to concatenate NumPy two or multiple arrays using the concatenate() , stack() , hstack() , vstack() , dstack() with examples. Concatenation refers to putting the contents of two or more arrays in a single array. In Python NumPy, we can join arrays by axes (vertical or horizontal), whereas in SQL we join tables based on keys.

References

You may also like reading:

Источник

Объединение и разделение массивов

На предыдущем занятии мы познакомились со способами изменения форм массивов. Здесь мы узнаем как реализуются операции объединения и разделения массивов. Для этой задачи в NumPy реализованы специальные функции, которые мы сейчас и рассмотрим.

Функции hstack и vstack

Предположим у нас есть два двумерных массива:

a = np.array([(1, 2), (3, 4)]) b = np.array([(5, 6), (7, 8)])

Их можно объединить как по горизонтали, так и по вертикали, с помощью функций:

np.hstack([a, b]) # объединение по оси axis1 (размерность 2x4) np.vstack([a, b]) # объединение по оси axis0 (размерность 4x2)

Примеры работы этих двух функций представлены на рисунке ниже:

Эти же операции можно выполнять и с многомерными массивами. Например, определим два трехмерных массива:

a = np.fromiter(range(18), dtype='int32') b = np.fromiter(range(18, 36), dtype='int32') a.resize(3, 3, 2) b.resize(3, 3, 2)
c = np.hstack([a, b]) # размерность 3x6x2 d = np.vstack([a, b]) # размерность 6x3x2

Как видите, здесь произошло формальное объединение по оси axis1 в функции hstack и по оси axis0 в функции vstack.

Разумеется, чтобы эти функции работали, размерность массивов по объединяемым осям должны совпадать.

Аналогичным образом происходит объединение и одномерных массивов:

a = np.fromstring('1 2 3 4', sep = ' ') b = np.fromstring('5 6 7 8', sep = ' ')

результатом будет двумерный массив:

Функции column_stack и row_stack

Давайте теперь зададимся вопросом: как объединить наши два одномерных массива столбцами? Чтобы результат выглядел вот так:

Для этого хорошо подходит функция column_stack():

np.column_stack([a, b]) # формирование массива 4x2

Если с ее помощью объединять двумерные и многомерные массивы, то она будет давать тот же результат, что и функция hstack().

Другая аналогичная функция row_stack(), в принципе, делает то же самое, что и функция vstack() заметных отличий здесь нет. Ее можно использовать так:

np.row_stack([a, b]) # матрица 2x4

Функция concatenate

Для объединения массивов вдоль строго определенной оси можно воспользоваться функцией concatenate(). Например, возьмем два трехмерных массива:

a = np.arange(1, 13) b = np.arange(13, 26) a.resize(3, 3, 2) b.resize(3, 3, 2)

И объединим их по каждой из осей:

c0 = np.concatenate([a, b], axis=0) # размерность 6x3x2 c1 = np.concatenate([a, b], axis=1) # размерность 3x6x2 c2 = np.concatenate([a, b], axis=2) # размерность 3x3x4

Объекты r_ и c_

Еще один способ объединения и создания массивов – это использование специальных объектов r_ и c_. Например, объект r_ создает копии массивов, следующими способами:

np.r_[ [1, 2, 3], 4, 5] # список + дополнительные элементы np.r_[ 1:9, 90, 100] # срез + два элемента np.r_[ np.array([1,2,3]), np.array([4,5,6])] # объединение двух массивов np.r_[ [(1,2,3), (4,5,6)], [(7,8,9)] ] # объединение двумерного и одномерного списков

По аналогии работает и второй объект c_, только объединение выполняется по второй оси axis1:

np.c_[1:5] np.c_[ [1, 2, 3], [4, 5, 6]] np.c_[ [(1,2,3), (4,5,6)], [[7],[8]] ]

Разделение массивов

Массивы в NumPy можно не только объединять, но и разделять. Для этого существуют специальные функции hsplit и vsplit. Рассмотрим их работу на простых примерах. Пусть имеется одномерный массив из 10 элементов:

И мы хотим разделить его на две равные части. Это реализуется с помощью функции hsplit:

которая возвращает список из двух массивов. Второй параметр 2 указывает число частей, на которые делится исходный массив. Причем, деление выполняется по горизонтали. Если в нашем примере указать 3 части, то возникнет ошибка:

np.hsplit(a, 3) # ошибка 10 на 3 нацело не делится

так как 10 элементов нельзя равномерно разбить на 3 части.

Также ошибка будет и при разбиении этого массива по вертикали:

np.vsplit(a, 2) # ошибка: нет вертикальной оси

так как массив имеет одну горизонтальную ось. Чтобы вторая функция сработала, преобразуем массив a в вектор столбец:

a.shape = 10, -1 # вектор-столбец

а, затем, разобьем по вертикали:

На выходе получим два одномерных массива длиной 5 элементов.

Эти же функции можно использовать и с многомерными массивами, например, так:

a = np.arange(12) a.resize(2, 6) # двумерный массив 2x6 np.hsplit(a, 2) # разбиение по горизонтали np.vsplit(a, 2) # разбиение по вертикали

Функция array_split

Рассмотренные функции выполняют разбиение или по первой оси axis0 или по второй оси axis1. Но что если нам нужно выполнить разбиение по произвольной оси многомерного массива? Для этого существует функция array_split(). Ее работа аналогична рассмотренным выше функциям, только дополнительно указывается ось разбиения. Например:

a = np.arange(18) a.resize(3, 3, 2) np.array_split(a, 2, axis=2) np.array_split(a, 3, axis=0) np.array_split(a, 3, axis=1)

Видео по теме

#1. Пакет numpy — установка и первое знакомство | NumPy уроки

#2. Основные типы данных. Создание массивов функцией array() | NumPy уроки

#3. Функции автозаполнения, создания матриц и числовых диапазонов | NumPy уроки

#4. Свойства и представления массивов, создание их копий | NumPy уроки

#5. Изменение формы массивов, добавление и удаление осей | NumPy уроки

#6. Объединение и разделение массивов | NumPy уроки

#7. Индексация, срезы, итерирование массивов | NumPy уроки

#8. Базовые математические операции над массивами | NumPy уроки

#9. Булевы операции и функции, значения inf и nan | NumPy уроки

#10. Базовые математические функции | NumPy уроки

#11. Произведение матриц и векторов, элементы линейной алгебры | NumPy уроки

#12. Множества (unique) и операции над ними | NumPy уроки

#13. Транслирование массивов | NumPy уроки

© 2023 Частичное или полное копирование информации с данного сайта для распространения на других ресурсах, в том числе и бумажных, строго запрещено. Все тексты и изображения являются собственностью сайта

Источник

numpy.concatenate#

The arrays must have the same shape, except in the dimension corresponding to axis (the first, by default).

axis int, optional

The axis along which the arrays will be joined. If axis is None, arrays are flattened before use. Default is 0.

out ndarray, optional

If provided, the destination to place the result. The shape must be correct, matching that of what concatenate would have returned if no out argument were specified.

dtype str or dtype

If provided, the destination array will have this dtype. Cannot be provided together with out.

Controls what kind of data casting may occur. Defaults to ‘same_kind’.

Concatenate function that preserves input masks.

Split an array into multiple sub-arrays of equal or near-equal size.

Split array into a list of multiple sub-arrays of equal size.

Split array into multiple sub-arrays horizontally (column wise).

Split array into multiple sub-arrays vertically (row wise).

Split array into multiple sub-arrays along the 3rd axis (depth).

Stack a sequence of arrays along a new axis.

Assemble arrays from blocks.

Stack arrays in sequence horizontally (column wise).

Stack arrays in sequence vertically (row wise).

Stack arrays in sequence depth wise (along third dimension).

Stack 1-D arrays as columns into a 2-D array.

When one or more of the arrays to be concatenated is a MaskedArray, this function will return a MaskedArray object instead of an ndarray, but the input masks are not preserved. In cases where a MaskedArray is expected as input, use the ma.concatenate function from the masked array module instead.

>>> a = np.array([[1, 2], [3, 4]]) >>> b = np.array([[5, 6]]) >>> np.concatenate((a, b), axis=0) array([[1, 2], [3, 4], [5, 6]]) >>> np.concatenate((a, b.T), axis=1) array([[1, 2, 5], [3, 4, 6]]) >>> np.concatenate((a, b), axis=None) array([1, 2, 3, 4, 5, 6]) 

This function will not preserve masking of MaskedArray inputs.

>>> a = np.ma.arange(3) >>> a[1] = np.ma.masked >>> b = np.arange(2, 5) >>> a masked_array(data=[0, --, 2], mask=[False, True, False], fill_value=999999) >>> b array([2, 3, 4]) >>> np.concatenate([a, b]) masked_array(data=[0, 1, 2, 2, 3, 4], mask=False, fill_value=999999) >>> np.ma.concatenate([a, b]) masked_array(data=[0, --, 2, 2, 3, 4], mask=[False, True, False, False, False, False], fill_value=999999) 

Источник

Оцените статью