FeatureClassToNumPyArray

概要

フィーチャクラスを NumPy 構造化配列に変換します。

ディスカッション

NumPy is a fundamental package for scientific computing in Python, including support for a powerful N-dimensional array object. For more information, see Working with NumPy in 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@TRUECENTROIDフィーチャの重心を表す X 座標と Y 座標の組み合わせ SHAPE@XY と同じ値が返されます。
  • SHAPE@Xフィーチャの X 座標 (Double)
  • SHAPE@Yフィーチャの Y 座標 (Double)
  • SHAPE@Zフィーチャの Z 座標 (Double)
  • SHAPE@Mフィーチャの M 値 (Double)
  • SHAPE@AREAフィーチャの面積 (Double)
  • SHAPE@LENGTHフィーチャの長さ (Double)
  • OID@ObjectID フィールドの値

Export a feature class to a NumPy array. The output array will include a field for the Object ID and a field containing a tuple of the feature's centroid's x,y coordinates.

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 and SHAPE@Z tokens will only return values if the in_table contains point features and is m-aware (or z-aware). If the in_table contains polygon, polyline, or multipart features, SHAPE@M and SHAPE@Z will return a nan. Any feature class that is not m-aware or z-aware will not support SHAPE@M and SHAPE@Z tokens.

(デフォルト値は次のとおりです *)

String
where_clause

返されるレコードを制限するオプションの条件式。 WHERE 句と SQL ステートメントの詳細については、クエリ式で使用されるエレメントの SQL リファレンスをご参照ください。

(デフォルト値は次のとおりです "")

String
spatial_reference

フィーチャクラスの空間参照。 これは、SpatialReference オブジェクトまたは同等の文字列を使用して指定できます。

Use the spatial_reference argument to return coordinates in a different spatial reference. Here, a second feature class is described to access a spatial reference object.

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_pointsTrue に設定されている場合、たとえば 5 つのポイントがあるマルチポイント フィーチャは 5 つの行で表現されます。

(デフォルト値は次のとおりです False)

Boolean
skip_nulls

NULL を使用するレコードをスキップするかどうかを制御します。 ブール値の True または False、または Python 関数または lambda 式を指定できます。

True に設定した場合、レコードの属性に NULL が含まれている場合 (ジオメトリを含む)、そのレコードはスキップされます。 False 設定では、skip_nulls は NULL に関係なくすべてのレコードを使用しようとします。 NumPy 配列では、NULL は浮動小数値の場合 NaN (Not a Number) と表現されますが、整数の場合は表現できません。

Skip all records that include a null.

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

Python 関数または lambda 式を使用すると、NULL 値を含むすべてのレコードの OID 値を記録するなど、より細かく制御することができます。 以下の 2 つの例では、NULL レコードを含む OID を特定するために lambda 式または関数が使用されています。

Use a function to capture all records that are skipped because of nulls.

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

Use a lambda expression to capture all records that are skipped because of nulls.

import arcpy
nullRows = list()
array = arcpy.da.FeatureClassToNumPyArray(fc, fields, 
                                    skip_nulls=lambda oid: nullRows.append(oid))
print(nullRows)
メモ:

NumPy 配列では、NULL は float タイプでは nan、テキスト タイプでは None などと表現されます。 整数タイプは、NULL 値の概念をサポートしていません。

(デフォルト値は次のとおりです False)

Variant
null_value

入力の NULL 値を新しい値に置き換えます。

null_value は、skip_nulls が評価される前に置き換えられます。

Mask all None's in integer fields with a -9999.

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

Mask None's in integer fields with different values using a dictionary.

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 を使用して、2 つのフィールドの相関係数を求めます。

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

関連トピック