FeatureClassToNumPyArray

Сводка

Конвертирует класс объектов в структурированный массив NumPy.

Описание

NumPy – это основной пакет для экспоненциальных вычислений в Python с поддержкой мощных n-размерных объектов типа массив (array). Подробнее см. в разделе Работа с NumPy в ArcGIS.

Для конвертации таблиц в массив NumPy следует использовать функцию TableToNumPyArray.

Синтаксис

FeatureClassToNumPyArray (in_table, field_names, {where_clause}, {spatial_reference}, {explode_to_points}, {skip_nulls}, {null_value})
ParameterОбъяснениеТип данных
in_table

Входной класс объектов, слой, таблица или табличное представление.

String
field_names
[field_names,...]

Список (или кортеж) имен полей. Для одного поля можно использовать строку вместо списка строк.

Используйте символ звездочки (*) вместо списка полей, если вы хотите получить доступ ко всем полям из входной таблицы (растровые поля и поля BLOB исключены). Однако для повышения производительности и улучшения надежности порядка полей рекомендуется сузить список полей до реально необходимых полей.

Поля растра и типа BLOB не поддерживаются. Объекты геометрии не поддерживаются при использовании токена SHAPE@, но информация о геометрии может быть включена при использовании других токенов, таких как SHAPE@XY (кортеж координат центроидаобъекта), SHAPE@AREA и SHAPE@LENGTH.

Доступ к дополнительной информации можно получить, используя токены (такие как OID@) вместо имен полей:

  • SHAPE@XYКортеж x, y координат центроида объекта.
  • SHAPE@TRUECENTROIDКортеж x, y координат центроида объекта. Выдает такой же результат, что и SHAPE@XY.
  • SHAPE@XЗначение двойной точности координаты х объекта.
  • SHAPE@YЗначение двойной точности координаты y объекта.
  • SHAPE@ZЗначение двойной точности координаты z объекта.
  • SHAPE@MЗначение двойной точности m для объекта.
  • SHAPE@AREAЗначение двойной точности для площади объекта.
  • SHAPE@LENGTHЗначение двойной точности для длины объекта.
  • OID@Значение поля ObjectID.

Экспорт класса объектов в массив NumPy. Выходной массив включает поле для идентификатора объекта и поле с кортежем координат x и y центроида объекта.

import arcpy
array = arcpy.da.FeatureClassToNumPyArray(fc, ["OID@", "SHAPE@XY"])

# The first row would look similar to the following:
#  (1, [-147.82339477539062, 64.86953735351562])
print(array[0])

Токены SHAPE@M и SHAPE@Z возвращают значения, только если in_table содержит точечные объекты и поддерживает значение M (или Z). Если in_table содержит полигональные, полилинейные или составные объекты, SHAPE@M и SHAPE@Z возвращают значение nan. Класс объектов, не поддерживающий значения M или Z, не поддерживает и токены SHAPE@M и SHAPE@Z.

(Значение по умолчанию — *)

String
where_clause

Возвращается дополнительное выражение, которое ограничивает записи. Более подробно об условиях WHERE и выражениях SQL см. раздел Справочник по SQL для элементов, используемых в выражениях запросов.

(Значение по умолчанию — "")

String
spatial_reference

Пространственная привязка класса объектов. Ее можно указать с объектом SpatialReference или со строковым эквивалентом.

Используйте аргумент spatial_reference для возврата координат в другой пространственной привязке. Здесь описывается второй класс объектов для доступа к объекту пространственной привязки.

import arcpy
SR = arcpy.Describe(fc2).spatialReference
arcpy.da.FeatureClassToNumPyArray(fc,
                                  ["OID@", "SHAPE@XY", "EDUCATION"], 
                                  spatial_reference=SR)

(Значение по умолчанию — None)

SpatialReference
explode_to_points

Разбивает объект на отдельные точки или вершины. Если для explode_to_points задано значение True, то мультиточечный объект с пятью точками, например, представляется пятью строками.

(Значение по умолчанию — False)

Boolean
skip_nulls

Управляет тем, пропускаются ли записи со значениями NULL. Это может быть логическое значение True или False, функция Python или выражение lambda.

Если задано значение True, запись пропускается, если какой-либо из атрибутов записи (в том числе геометрия) имеет значение null. При значении False, skip_nulls пытается использовать все записи, вне зависимости от значений null. В массиве NumPy отсутствие значений представляется как nan (not a number – не число) для числовых значений с плавающей точкой, но не для целых чисел.

Пропустить все записи со значениями NULL.

import arcpy
array = arcpy.da.FeatureClassToNumPyArray(fc, fields, skip_nulls=True)

Функцию Python и выражение lambda можно использовать для более детального управления, например, записи в журнал значений OID всех записей с NULL. В обоих примерах ниже , выражение lambda или функция используются для определения OID с записями null.

Используйте функцию для получения всех записей, пропущенных из-за значений NULL.

import arcpy
def getnull(oid):
    nullRows.append(oid)
    return True
nullRows = list()
array = arcpy.da.FeatureClassToNumPyArray(table, fields, skip_nulls=getnull)
print(nullRows)

Используйте лямбда-выражения для получения всех записей, пропущенных из-за значений NULL.

import arcpy
nullRows = list()
array = arcpy.da.FeatureClassToNumPyArray(fc, fields, 
                                    skip_nulls=lambda oid: nullRows.append(oid))
print(nullRows)
Примечание:

В массивах NumPy строки с null представляются в типах с плавающей запятой, как nan, а в текстовых типах – как None. Целочисленные типы не поддерживают концепцию NULL.

(Значение по умолчанию — False)

Variant
null_value

Заменяет NULL из входных данных на новое значение.

null_value заменяется до вычисления skip_nulls.

Замаскируйте все значения Нет (None) в целочисленных полях значением -9999.

import arcpy
fields = ['field1', 'field2']
arcpy.da.FeatureClassToNumPyArray(fc, fields, null_value=-9999)

С помощью словаря замаскируйте другими значениями все отсутствующие значения None в целочисленных полях.

import arcpy
fields = ['field1', 'field2']
nullDict = {'field1':-999999, 'field2':-9999}
arcpy.da.FeatureClassToNumPyArray(fc, fields, null_value=nullDict)
Внимание:

Указание маски, например -9999, позволяет экспортировать целочисленные поля без значений (NULL) в массив NumPy, но будьте осторожны при использовании этих значений при анализе. Результаты могут быть искажены данным значением.

(Значение по умолчанию — None)

Integer
Значение отраженного сигнала
Тип данныхОбъяснение
NumPyArray

Структурированный массив NumPy.

Пример кода

Преобразование таблицы в массив NumPY и выполнение базовых статистических операций с NumPY.

import arcpy
import numpy

input = "c:/data/usa.gdb/USA/counties"
arr = arcpy.da.FeatureClassToNumPyArray(input, ('STATE_NAME', 'POP1990', 'POP2000'))

# Sum the total population for 1990 and 2000
#
print(arr["POP1990"].sum())
print(arr["POP2000"].sum())

# Sum the population for the state of Minnesota
#
print(arr[arr['STATE_NAME'] == "Minnesota"]['POP2000'].sum())

Используйте функцию TableToNumPyArray для определения коэффициентов корреляции для двух полей.

import arcpy
import numpy

input = "c:/data/usa.gdb/USA/counties"
field1 = "INCOME"
field2 = "EDUCATION"

arr = arcpy.da.FeatureClassToNumPyArray(input, (field1, field2))

# Print correlation coefficients for comparison of 2 field values
#               
print(numpy.corrcoef((arr[field1], arr[field2])))

Связанные разделы