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})
ПараметрОписаниеТип данных
in_table

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

String
field_names
[field_names,...]

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

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

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

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

  • SHAPE@XYКортеж x, y координат центроида объекта.
  • SHAPE@XYZКортеж x, y, z координат центроида объекта.
  • SHAPE@TRUECENTROIDКортеж x, y координат центроида объекта. Выдает такой же результат, что и SHAPE@XY.
  • SHAPE@XЗначение двойной точности координаты х объекта.
  • SHAPE@YЗначение двойной точности координаты y объекта.
  • SHAPE@ZЗначение двойной точности координаты z объекта.
  • SHAPE@MЗначение двойной точности m для объекта.
  • SHAPE@JSONСтрока Esri JSON, представляющая геометрию.
  • SHAPE@WKBСтандартное двоичное (well-known binary, WKB) представление для геометрии OGC. Он обеспечивает портативное представление значения геометрии в виде непрерывного потока байтов.
  • SHAPE@WKTСтандартное текстовое (well-known text, WKT) представление для геометрии OGC. Он обеспечивает портативное представление значения геометрии в виде текстовой строки.
  • SHAPE@AREAЗначение двойной точности для площади объекта.
  • SHAPE@LENGTHЗначение двойной точности для длины объекта.
  • OID@Значение поля Object ID.

Экспорт класса объектов в массив 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 для выражений запросов, применяемых в ArcGIS.

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

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])))

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