কোনও বৈশিষ্ট্য শ্রেণিতে বৈশিষ্ট্যগুলির সংখ্যা গণনা করার দ্রুততম উপায়?


35

আরকিপি (30x দ্রুত অনুসন্ধানের কার্সার) -তে ডেটা অ্যাক্সেস মডিউলটি প্রবর্তন করে, আমি জানতে চাই যে স্কয়ার মানদণ্ডের সাথে মেলে বৈশিষ্ট্যগুলি গণনাগুলি কি গতানুগতিক মেকটেবলভিউ + গেটকাউন্ট পদ্ধতির চেয়ে দ্রুত?


12
বৈশিষ্ট্য গণনাটি কেবল একটি আরকি-র সম্পত্তি নয়, এটিকে নির্বোধ বলে বর্ণনা করুন
গ্র্যান্ট হ্যামফ্রিজ

কিছু ওজিআর এসকিউএল সহ ওগ্রিনফো দিয়ে এটি বেশ সহজ ছিল । ডেটাসেটে 170000 রেকর্ডের মতো কিছু রয়েছে এবং আন-ইনডেক্স VARCHARক্ষেত্রের এই ওয়াইল্ডকার্ড অনুসন্ধানটি মাত্র কয়েক সেকেন্ডের মধ্যে ফিরে এসেছিল। ogrinfo "C:\xGIS\Vector\parcels\parcels_20140829_pmerc.ovf -sql "SELECT count(*) FROM parcels_20140829_pmerc WHERE tms like 'R39200-02-%'"
elrobis

উত্তর:


2

আমি উপরের উত্তর থেকে সমাধানটি পরীক্ষা করেছি এবং আমার বাস্তব বিশ্বের ডেটাতে পার্থক্য নগণ্য। অন্যান্য উত্তরের ফলাফলের বিপরীতে, আমার সময় আরকিপি.মেকટેবলভিউ_ম্যানেজমেন্ট এবং আরসিপি.ডি.এর জন্য অনুসন্ধানের সময়.আরকম্যাপের মধ্যে সার্চকার্সার একই।

আমি কোয়েরি ছাড়াই এবং ছাড়াই বিভিন্নতা পরীক্ষা করেছি, অনুগ্রহ করে ক্যোয়ারী সংস্করণের কোড এবং নীচের চূড়ান্ত পরিমাপের ফলাফলগুলি দেখুন:

@staticmethod
def query_features(feature_class, query):

    # Method 1
    time.sleep(5)  # Let the cpu/ram calm before proceeding!
    start_time = time.clock()
    count = len(list(i for i in arcpy.da.SearchCursor(feature_class, ["OBJECTID"], query)))
    end_time = time.clock()
    arcpy.AddMessage("Method 1 finished in {} seconds".format((end_time - start_time)))
    arcpy.AddMessage("{} features".format(count))

    # Method 2
    time.sleep(5)  # Let the cpu/ram calm before proceeding!
    start_time = time.clock()
    arcpy.MakeTableView_management(feature_class, "myTableView", query)
    count = int(arcpy.GetCount_management("myTableView").getOutput(0))

    end_time = time.clock()
    arcpy.AddMessage("Method 2 in {} seconds".format((end_time - start_time)))
    arcpy.AddMessage("{} features".format(count))

নীচের ফলাফল:

    No query:
    Method 1 finished in 5.3616442 seconds
    804140 features
    Method 2 in 4.2843138 seconds
    804140 features

    Many results query:
    Method 1 finished in 12.7124766 seconds
    518852 features
    Method 2 in 12.1396602 seconds
    518852 features

    Few results query:
    Method 1 finished in 11.1421476 seconds
    8 features
    Method 2 in 11.2232503 seconds
    8 features

ঠিক আছে, প্রশ্নের উত্তরটি পেয়ে প্রায় 7 বছর কেটে গেছে তাই আমি আশা করব যে তারা তাদের এসডিকে উন্নতি করেছে !!! =) নিজেই এটি পরীক্ষা করার জন্য ধন্যবাদ মিরো।
মাইকেল মার্কিয়েতা

47

আমি একটি ফাইলজিওডাটাবেসের ভিতরে 1 মিলিয়ন এলোমেলোভাবে উত্পন্ন পয়েন্ট সহ একটি উদাহরণ ব্যবহার করছি। এখানে সংযুক্ত ।

আমাদের শুরু করার জন্য এখানে কিছু কোড দেওয়া হয়েছে:

import time
import arcpy

arcpy.env.workspace = "C:\CountTest.gdb"

time.sleep(5) # Let the cpu/ram calm before proceeding!

"""Method 1"""
StartTime = time.clock()
with arcpy.da.SearchCursor("RandomPoints", ["OBJECTID"]) as cursor:
    rows = {row[0] for row in cursor}

count = 0
for row in rows:
    count += 1

EndTime = time.clock()
print "Finished in %s seconds" % (EndTime - StartTime)
print "%s features" % count

time.sleep(5) # Let the cpu/ram calm before proceeding!

"""Method 2"""
StartTime2 = time.clock()
arcpy.MakeTableView_management("RandomPoints", "myTableView")
count = int(arcpy.GetCount_management("myTableView").getOutput(0))

EndTime2 = time.clock()
print "Finished in %s seconds" % (EndTime2 - StartTime2)
print "%s features" % count

এবং কিছু প্রাথমিক ফলাফল:

>>> 
Finished in 6.75540050237 seconds
1000000 features
Finished in 0.801474780332 seconds
1000000 features
>>> =============================== RESTART ===============================
>>> 
Finished in 6.56968596918 seconds
1000000 features
Finished in 0.812731769756 seconds
1000000 features
>>> =============================== RESTART ===============================
>>> 
Finished in 6.58207512487 seconds
1000000 features
Finished in 0.841122157314 seconds
1000000 features

আরও বড়, আরও জটিল ডেটাসেটগুলি কল্পনা করুন। অনুসন্ধানকার্সর অনির্দিষ্টকালের জন্য ক্রল করবে।

আমি ফলাফলগুলি নিয়ে মোটেও অসন্তুষ্ট নই, তবে, আমাদের জিআইএস ডেভেলপমেন্ট সার্কেলে ডেটাএকসেস মডিউলটি ব্যাপকভাবে ব্যবহৃত হচ্ছে। আমি এই মডিউলটির সাথে আমাদের কয়েকটি ফাংশন সংজ্ঞা পুনর্নির্মাণ করতে চাইছি কারণ এটি মেকটেবলভিউ + গেটকাউন্ট পদ্ধতিটির চেয়ে আরও নমনীয়।


চমৎকার রাউন্ডআপ। সম্পূর্ণতার জন্য আমি আইএমও দ্রুততম হওয়া উচিত তা যুক্ত করতে চাই তবে বাস্তবে এটি সবচেয়ে ধীরতম পদ্ধতি (10x ধীর)। arcpy.Statistics_analysis("RandomPoints", r"in_memory\count", [["OBJECTID", "COUNT"]]) cursor = arcpy.da.SearchCursor(r"in_memory\count", ["COUNT_OBJECTID"]) row = cursor.next() del cursor count = row[0]
বেরেন্ড
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.