Изменение формы и структуры массива в NumPy

Соединение, разбиение и изменение формы массивов в NumPy

В NumPy предоставлены различные инструменты для изменения формы и структуры массивов. Понимание их использования очень важно, так как это позволяет гибко манипулировать данными.

Методы изменения формы и структуры массива

  • reshape(): позволяет изменить форму массива без изменения его данных.
import numpy as np

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

# [[1 2 3]
#  [4 5 6]]
  • ravel(): возвращает одномерный массив, состоящий из элементов исходного массива.
c = np.array([[1, 2, 3], [4, 5, 6]])
d = c.ravel()
print(d)  # [1 2 3 4 5 6]
  • flatten(): этот метод похож на ravel(), но всегда возвращает копию массива.
c = np.array([[1, 2, 3], [4, 5, 6]])
e = c.flatten()
print(e)  # [1 2 3 4 5 6]
  • transpose(): меняет местами строки и столбцы массива.
f = np.array([[1, 2], [3, 4], [5, 6]])
g = f.transpose()
print(g)

# [[1 3 5]
#  [2 4 6]]
  • resize(): изменяет форму и размер массива. Если новый размер больше исходного, добавляет копии исходного массива.
h = np.array([1, 2, 3])
i = np.resize(h, (2, 3))
print(i)

# [[1 2 3]
#  [1 2 3]]
  • swapaxes(): меняет местами две оси массива.
j = np.array([[1, 2, 3]])
k = np.swapaxes(j, 0, 1)
print(k)

# [[1]
#  [2]
#  [3]]
  • rollaxis(): перемещает указанную ось на заданную позицию.
l = np.array([[1, 2, 3], [4, 5, 6]])
m = np.rollaxis(l, 1, 0)
print(m)

# [[1 4]
#  [2 5]
#  [3 6]]

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

Соединение и разбиение массивов

Рассмотрим методы для соединения и разбиения массивов в NumPy.

Соединение массивов

  • concatenate(): этот метод соединяет два или более массивов вдоль существующей оси.
import numpy as np

x = np.array([1, 2, 3])
y = np.array([4, 5, 6])
z = np.concatenate([x, y])
print(z)  # [1 2 3 4 5 6]

Для многомерных массивов вы можете задать ось с помощью параметра axis.

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

# [[1 2]
#  [3 4]
#  [5 6]]
  • vstack() и hstack(): вертикальное соединение и горизонтальное соединение являются удобными методами для соединения массивов.
a = np.array([1, 2, 3])
b = np.array([4, 5, 6])
v = np.vstack([a, b])
h = np.hstack([a, b])
print(v)
# [[1 2 3]
#  [4 5 6]]
print(h)  # [1 2 3 4 5 6]
  • stack(): позволяет соединять массивы вдоль новой оси.
a = np.array([1, 2, 3])
b = np.array([4, 5, 6])
s = np.stack([a, b], axis=1)
print(s)

# [[1 4]
#  [2 5]
#  [3 6]]

Разбиение массивов

  • split(): разделяет массив на несколько подмассивов.
x = np.array([1, 2, 3, 99, 99, 4, 5, 6])
x1, x2, x3 = np.split(x, [3, 5])
print(x1, x2, x3)  # [1 2 3] [99 99] [4 5 6]
  • vsplit() и hsplit(): разделяет массив по вертикали и по горизонтали.
matrix = np.arange(16).reshape(4, 4)
upper, lower = np.vsplit(matrix, 2)
left, right = np.hsplit(matrix, 2)
  • array_split(): этот метод похож на split(), но позволяет разделять массивы на не равные части.
x = np.array([1, 2, 3, 4, 5, 6])
x1, x2, x3 = np.array_split(x, 3)
print(x1, x2, x3)  # [1 2] [3 4] [5 6]

Заключение

Используя указанные выше инструменты, вы можете легко и гибко манипулировать формой и структурой массивов в NumPy. Это особенно полезно при подготовке данных для анализа или когда необходимо преобразовать данные из одного формата в другой.

Содержание: