আরকিজিআইএস সংস্করণ 10.1 এর সাথে ডেটা অ্যাক্সেস মডিউলটি চালু করা হয়েছিল। ESRI ডেটা অ্যাক্সেস মডিউলটিকে নিম্নরূপ ( উত্স ) হিসাবে বর্ণনা করেছে :
ডেটা অ্যাক্সেস মডিউল, আরসিপি.ডি, ডেটা নিয়ে কাজ করার জন্য পাইথন মডিউল। এটি সম্পাদনা অধিবেশন, সম্পাদনা অপারেশন, উন্নত কার্সার সমর্থন (দ্রুত পারফরম্যান্স সহ), সারণী এবং বৈশিষ্ট্য শ্রেণিগুলিকে NumPy অ্যারেতে এবং এর থেকে রূপান্তর করার জন্য ফাংশন এবং সংস্করণ, প্রতিরূপ, ডোমেন এবং সাব টাইপ ওয়ার্কফ্লো সমর্থন করে support
যাইহোক, কার্সারের পূর্ববর্তী প্রজন্মের তুলনায় কার্সার কার্যকারিতা কেন এত উন্নত হয়েছে সে সম্পর্কে খুব কম তথ্য আছে।
সংযুক্ত চিত্রটি da
পুরাতন আপডেটডাক্সার পদ্ধতি বনাম নতুন পদ্ধতি আপডেটকর্সারে একটি মানদণ্ড পরীক্ষার ফলাফল দেখায় । মূলত, স্ক্রিপ্টটি নিম্নলিখিত কর্মপ্রবাহটি সম্পাদন করে:
- এলোমেলো পয়েন্ট তৈরি করুন (10, 100, 1000, 10000, 100000)
- এলোমেলোভাবে একটি সাধারণ বিতরণ থেকে নমুনা এবং একটি কার্সর সহ এলোমেলো পয়েন্টস অ্যাট্রিবিউট টেবিলের একটি নতুন কলামে মান যুক্ত করুন
- নতুন এবং পুরানো উভয় আপডেট কার্সার পদ্ধতির জন্য প্রতিটি র্যান্ডম পয়েন্ট দৃশ্যের 5 টি পুনরাবৃত্তি চালান এবং তালিকায় গড় মান লিখুন
- ফলাফল প্লট করুন
da
চিত্রের দেখানো ডিগ্রিতে কার্সর সম্পাদনাকে উন্নত করতে আপডেট কার্সর সহ পর্দার আড়ালে কী চলছে ?
import arcpy, os, numpy, time
arcpy.env.overwriteOutput = True
outws = r'C:\temp'
fc = os.path.join(outws, 'randomPoints.shp')
iterations = [10, 100, 1000, 10000, 100000]
old = []
new = []
meanOld = []
meanNew = []
for x in iterations:
arcpy.CreateRandomPoints_management(outws, 'randomPoints', '', '', x)
arcpy.AddField_management(fc, 'randFloat', 'FLOAT')
for y in range(5):
# Old method ArcGIS 10.0 and earlier
start = time.clock()
rows = arcpy.UpdateCursor(fc)
for row in rows:
# generate random float from normal distribution
s = float(numpy.random.normal(100, 10, 1))
row.randFloat = s
rows.updateRow(row)
del row, rows
end = time.clock()
total = end - start
old.append(total)
del start, end, total
# New method 10.1 and later
start = time.clock()
with arcpy.da.UpdateCursor(fc, ['randFloat']) as cursor:
for row in cursor:
# generate random float from normal distribution
s = float(numpy.random.normal(100, 10, 1))
row[0] = s
cursor.updateRow(row)
end = time.clock()
total = end - start
new.append(total)
del start, end, total
meanOld.append(round(numpy.mean(old),4))
meanNew.append(round(numpy.mean(new),4))
#######################
# plot the results
import matplotlib.pyplot as plt
plt.plot(iterations, meanNew, label = 'New (da)')
plt.plot(iterations, meanOld, label = 'Old')
plt.title('arcpy.da.UpdateCursor -vs- arcpy.UpdateCursor')
plt.xlabel('Random Points')
plt.ylabel('Time (minutes)')
plt.legend(loc = 2)
plt.show()