Функция ascontiguousarray
Функция ascontiguousarray преобразует входной массив в C-непрерывное представление памяти. В C-непрерывном массиве элементы располагаются в порядке строк (row-major), то есть последняя ось изменяется быстрее всего. Первым параметром функция принимает массивоподобный объект (array-like). Вторым параметром можно указать тип данных dtype для результирующего массива.
Синтаксис
np.ascontiguousarray(a, [dtype])
Пример
Создадим массив и проверим, является ли он C-непрерывным с помощью атрибута flags:
import numpy as np
arr = np.array([[1, 2, 3], [4, 5, 6]])
print(arr.flags['C_CONTIGUOUS'])
Результат выполнения кода:
True
Пример
Создадим массив с типом float64 и преобразуем его в C-непрерывный с типом int32:
import numpy as np
arr = np.array([1.5, 2.7, 3.2])
res = np.ascontiguousarray(arr, dtype=np.int32)
print(res)
print(res.dtype)
Результат выполнения кода:
[1 2 3]
int32
Пример
Если исходный массив не является C-непрерывным из-за среза (view), функция создаст копию в C-порядке:
import numpy as np
arr = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
slice_arr = arr[:, ::2]
print(slice_arr.flags['C_CONTIGUOUS'])
res = np.ascontiguousarray(slice_arr)
print(res.flags['C_CONTIGUOUS'])
Результат выполнения кода:
False
True
Пример
Функция ascontiguousarray не копирует данные, если массив уже является C-непрерывным:
import numpy as np
arr = np.array([1, 2, 3, 4, 5])
res = np.ascontiguousarray(arr)
print(res is arr)
Результат выполнения кода:
True
Смотрите также
-
функцию
asfortranarray,
которая преобразует массив в Fortran-непрерывный порядок (column-major) -
функцию
asarray,
которая преобразует входные данные в массив без лишнего копирования -
функцию
copy,
которая создает явную копию массива с возможностью указания порядка -
функцию
require,
которая возвращает массив с заданными требованиями к памяти и порядку