РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
425 of 541 menu

Атрибут flags

Атрибут flags объекта ndarray возвращает объект, содержащий флаги, описывающие свойства памяти массива. Он предоставляет информацию о том, является ли массив непрерывным (C-style или Fortran-style), доступен ли он для записи, выровнены ли данные, а также другие важные характеристики. Эти флаги полезны при оптимизации производительности и понимании того, как NumPy работает с данными.

Синтаксис

arr.flags

Основные флаги

Рассмотрим основные флаги, доступные через атрибут flags:

  • ⁅b⁆C_CONTIGUOUS (C)⁅/b⁆ - массив расположен в памяти в порядке C (по строкам). Это означает, что элементы последней оси идут подряд в памяти.
  • ⁅b⁆F_CONTIGUOUS (F)⁅/b⁆ - массив расположен в памяти в порядке Fortran (по столбцам).
  • ⁅b⁆OWNDATA (O)⁅/b⁆ - массив владеет своими данными, то есть не является представлением (view) другого массива.
  • ⁅b⁆WRITEABLE (W)⁅/b⁆ - массив доступен для записи. Если этот флаг установлен в False, массив нельзя изменять.
  • ⁅b⁆ALIGNED (A)⁅/b⁆ - данные массива выровнены в памяти, что может ускорить доступ к ним.
  • ⁅b⁆WRITEBACKIFCOPY (X)⁅/b⁆ - массив является копией, и при его удалении изменения будут записаны обратно в исходный массив.

Пример

Давайте создадим массив и посмотрим на его флаги:

import numpy as np arr = np.array([[1, 2, 3], [4, 5, 6]]) print(arr.flags)

Результат выполнения кода:

C_CONTIGUOUS : True F_CONTIGUOUS : False OWNDATA : True WRITEABLE : True ALIGNED : True WRITEBACKIFCOPY : False

Массив создан с помощью функции array, поэтому он расположен в порядке C, владеет своими данными и доступен для записи.

Пример

Создадим массив в порядке Fortran и сравним флаги:

import numpy as np arr = np.array([[1, 2, 3], [4, 5, 6]], order='F') print(arr.flags)

Результат выполнения кода:

C_CONTIGUOUS : False F_CONTIGUOUS : True OWNDATA : True WRITEABLE : True ALIGNED : True WRITEBACKIFCOPY : False

Теперь массив расположен в порядке Fortran, что видно по флагу F_CONTIGUOUS.

Пример

Проверим, можно ли записывать данные в массив, и изменим этот флаг:

import numpy as np arr = np.array([1, 2, 3, 4, 5]) print(arr.flags['WRITEABLE']) arr.flags['WRITEABLE'] = False try: arr[0] = 10 except ValueError as e: print(e)

Результат выполнения кода:

True assignment destination is read-only

После установки флага WRITEABLE в False массив становится доступным только для чтения, и попытка изменения вызывает ошибку.

Пример

Используем метод copy для создания копии массива и посмотрим на флаги:

import numpy as np arr = np.array([1, 2, 3, 4, 5]) arr_copy = arr.copy() print(arr.flags['OWNDATA']) print(arr_copy.flags['OWNDATA'])

Результат выполнения кода:

True True

Оба массива владеют своими данными, так как copy создаёт независимую копию.

Пример

Проверим, является ли массив представлением (view) другого массива:

import numpy as np arr = np.array([1, 2, 3, 4, 5]) arr_view = arr[1:4] print(arr.flags['OWNDATA']) print(arr_view.flags['OWNDATA'])

Результат выполнения кода:

True False

Срез массива является представлением, поэтому он не владеет своими данными (флаг OWNDATA равен False).

Смотрите также

  • атрибут strides,
    который содержит шаги для доступа к элементам массива
  • атрибут base,
    который возвращает объект-владелец данных для представления
  • метод copy,
    который создаёт независимую копию массива
  • метод reshape,
    который изменяет форму массива без копирования данных
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить