Які методи доступні в ArcGIS 10.2 для випадкового підмноження вибору очок. Наприклад, на доданому скріншоті мені цікаво зберегти 20% вибраних пунктів і видалити решту.
Які методи доступні в ArcGIS 10.2 для випадкового підмноження вибору очок. Наприклад, на доданому скріншоті мені цікаво зберегти 20% вибраних пунктів і видалити решту.
Відповіді:
Ось функція python, яка буде вибирати випадкові функції у шарі на основі відсотків, ігноруючи поточний вибір:
def SelectRandomByPercent (layer, percent):
#layer variable is the layer name in TOC
#percent is percent as whole number (0-100)
if percent > 100:
print "percent is greater than 100"
return
if percent < 0:
print "percent is less than zero"
return
import random
fc = arcpy.Describe (layer).catalogPath
featureCount = float (arcpy.GetCount_management (fc).getOutput (0))
count = int (featureCount * float (percent) / float (100))
if not count:
arcpy.SelectLayerByAttribute_management (layer, "CLEAR_SELECTION")
return
oids = [oid for oid, in arcpy.da.SearchCursor (fc, "OID@")]
oidFldName = arcpy.Describe (layer).OIDFieldName
path = arcpy.Describe (layer).path
delimOidFld = arcpy.AddFieldDelimiters (path, oidFldName)
randOids = random.sample (oids, count)
oidsStr = ", ".join (map (str, randOids))
sql = "{0} IN ({1})".format (delimOidFld, oidsStr)
arcpy.SelectLayerByAttribute_management (layer, "", sql)
Скопіюйте / вставте це в оболонку python в ArcMap.
Тоді в типі оболонки SelectRandomByPercent ("layer", num)
, де layer
назва вашого шару, і num
це ціла кількість ваших відсотків.
Варіант пошуку вибору підмножини відповідно до запитання:
def SelectRandomByPercent (layer, percent):
#layer variable is the layer name in TOC
#percent is percent as whole number (0-100)
if percent > 100:
print "percent is greater than 100"
return
if percent < 0:
print "percent is less than zero"
return
import random
featureCount = float (arcpy.GetCount_management (layer).getOutput (0))
count = int (featureCount * float (percent) / float (100))
if not count:
arcpy.SelectLayerByAttribute_management (layer, "CLEAR_SELECTION")
return
oids = [oid for oid, in arcpy.da.SearchCursor (layer, "OID@")]
oidFldName = arcpy.Describe (layer).OIDFieldName
path = arcpy.Describe (layer).path
delimOidFld = arcpy.AddFieldDelimiters (path, oidFldName)
randOids = random.sample (oids, count)
oidsStr = ", ".join (map (str, randOids))
sql = "{0} IN ({1})".format (delimOidFld, oidsStr)
arcpy.SelectLayerByAttribute_management (layer, "", sql)
Нарешті, ще одна варіація вибору шару за кількістю, а не відсотків:
def SelectRandomByCount (layer, count):
import random
layerCount = int (arcpy.GetCount_management (layer).getOutput (0))
if layerCount < count:
print "input count is greater than layer count"
return
oids = [oid for oid, in arcpy.da.SearchCursor (layer, "OID@")]
oidFldName = arcpy.Describe (layer).OIDFieldName
path = arcpy.Describe (layer).path
delimOidFld = arcpy.AddFieldDelimiters (path, oidFldName)
randOids = random.sample (oids, count)
oidsStr = ", ".join (map (str, randOids))
sql = "{0} IN ({1})".format (delimOidFld, oidsStr)
arcpy.SelectLayerByAttribute_management (layer, "", sql)
random.sample()
.
sql
параметра?
Як правило, я також рекомендую використовувати засоби просторової екології, про які йде мова в blah238.
Однак іншим методом, який ви можете спробувати, було б додати атрибут під назвою Random для зберігання випадкового числа:
Потім, використовуючи калькулятор поля на цьому атрибуті, за допомогою аналізатора Python, використовуйте наступний блок-код:
import random
def rand():
return random.random()
Дивіться зображення нижче:
Це створить випадкові значення між 0 і 1. Потім, якщо ви хочете вибрати 20% функцій, ви можете вибрати функції, де значення випадкового значення менше 0,2. Звичайно, це буде працювати краще з багатьма функціями. Я створив тестовий клас із лише 7 ознаками як тест, і значення не було менше 0,2. Однак, схоже, у вас є безліч функцій, тому це не має значення.
Існує також більш рання функція Select у випадковому сценарії від @StephenLead, доступна для ArcGIS Desktop. Хоча я писав, я думаю, для ArcGIS 9.x, і востаннє змінений у 2008 році, я використав його приблизно у 2010 році в 10.0, і він все ще працював добре.
Ви можете спробувати Інструменти Хоута: http://www.spatialecology.com/htools/rndsel.php
Зауважте, що існуючий вибір не вшановується, тому вам доведеться спочатку створити функціональний шар із існуючого вибору.
Ось ще одне доповнення для випадкового вибору для ArcGIS 10, інструмента проектування вибірки . Це дозволить вибрати 20% функцій у вашому наборі даних. Однак для вибраного набору не використовується вибраний набір, подібний до обмежень інструментів Хоута, згаданих blah238.
Ви також можете скористатися інструментом " Підмножина" . Відповідно до документації:
Розділяє вихідний набір даних на дві частини: одна частина, яка буде використана для моделювання просторової структури та отримання поверхні, інша, яка буде використана для порівняння та перевірки вихідної поверхні.
Один недолік - те, що вам потрібно розширення Geostatistic Analyst.