Perl5 كلغة علوم بيانات
مقدمة السلسلة — Post 0 of N
هذا المنشور هو الأول في سلسلة توثق التطوير المشترك لمحرك قاعدة بيانات متجه (VDBE) مكتوب بالكامل في Perl5 + PDL. في وقت لاحق، تمر المشاركات عبر كل مكون من مكونات هذا المحرك ؛ هذا واحد يضع المسرح. الزخم الرئيسي لهذه السلسلة ليس أن تقوم بتفريغ VDBE الخاص بك لأنني لا أقوم بمطالبات الأداء، ولكن لإظهار كيف يمكن للمرء استخدام Perl لتحقيق أي شيء يمكنك تحقيقه بأي لغة أخرى، ولكن أكثر ذكاءً!
جدول المحتويات
- جدول المحتويات
- 1. لماذا Perl5 لعلوم البيانات؟
- 2. نظام Perl Data-Type — نقاط القوة وحدود Cache-Era
- 3. إدخال PDL: الصفائف N-Dimensional المكتوبة بشكل قوي
- 4. نوع المقارنة: بيرل، PDL، وR جنبا إلى جنب
- 5. خريطة الطريق: ما تغطيه بقية هذه السلسلة
- المشاركة 1 - التسلسل والإدخال/الإخراج:
VectorIOالوحدة النمطية - Post 2 — محاكاة قاعدة بيانات متجهات
- آخر 3 — قياس:
timing_DBالوحدة النمطية - Post 4 — K-Means تجميع مع
PDL::الإحصائيات::Kmeans - Post 5 — Mini-Batch K-Means: التوسع إلى مجموعات البيانات الكبيرة
- Post 6 — Inverted File Index (IVF) بحث
- Post 7 — التحقق ضد R: التصحيح العددي وخطوط الأنابيب عبر اللغات
- المشاركة 1 - التسلسل والإدخال/الإخراج:
1. لماذا Perl5 لعلوم البيانات؟
عندما يناقش علماء البيانات خيارات اللغة، تتقارب المحادثة بسرعة على بايثون أو R أو جوليا. نادرا ما يحصل Perl5 على مقعد على الطاولة - لكنه يحمل مجموعة مقنعة من السمات التي تستحق نظرة ثانية. هذه السمات لم تتغير ماديا على مر السنين (Perl5 كان دائما بهذه الطريقة!)، ولكن ما لم لقد تعرضت للغة وتعلمت أن تقدر قسوتها وعقلانيتها ومرونتها وإمكانية التعبير عنها واستخدمتها فعليًا لدفع عملك إلى الأمام.، كنت لا تعرف هذه الميزات لا تأتي فقط مجانا مع Perl5، ولكن يمكن أن تساعدك على دفع مشاريعك إلى الأمام.
نشر في كل مكان بدون تثبيت
Perl5 يتم الشحن كمكون افتراضي لكل نظام تشغيل يشبه UNIX تقريبًا - تتضمن توزيعات لينكس وmacOS وBSDs والعديد من بيئات لينكس المضمنة جميعها عملًا بيرل ثنائي خارج الصندوق. تعمل بايثون على تحقيق تقدم هنا، ولكن لا يزال من الشائع العثور على خوادم بدون رأس أو أجهزة شبكة أو عقد تسجيل دخول HPC.
حيث بيرل موجود وكومة بايثون كاملة ليست كذلك. يمكن تشغيل مسار بيانات مكتوب في Perl في اليوم الأول بدون اتفاق بيئة، a ثؤلولأو حاوية.
إمكانية النقل من مركز البيانات إلى الحافة
يمكن تشغيل نفس الاسكربت الذي يحلل مجموعة بيانات تيرابايت على نقطة توصيل الحوسبة عالية الأداء (HPC) ذات 256 نواة، مع تغييرات تكوين بسيطة، على Raspberry Pi أو عبّارة IoT أو وحدة تحكم مضمنة. بيرل’نموذج النشر الثنائي الأحادي والنفقات الإضافية المنخفضة لوقت التشغيل تجعله حقيقيًا “الكتابة مرة واحدة، تشغيل في أي مكان” اللغة في البيئات حيث بايثون’المترجم العلوية أو جوليا’وقت الإحماء JIT سيكون غير مقبول.
إذا كنت تخطط للنشر في أي مكان و everywhere Perl5 هو خيارك الواضح.
تراث مبني على نصوص وبيانات
تم تصميم Perl من الألف إلى الياء لمعالجة النصوص والتعبيرات العادية و “لزاق” العمل بين مكونات النظام. في الممارسة العملية، تهيمن على خطوط البيانات العلمية ليس من خلال الحساب الرقمي ولكن من خلال *التنازع على البيانات *: قراءة تنسيقات الملفات غير المتجانسة، وتنظيف السجلات الفوضوية، والانضمام إلى مجموعات البيانات من مصادر مختلفة، ونتائج التوجيه إلى المكونات المستهلكة في المراحل النهائية.
بيرل’لا يزال محرك regex من بين أقوى ما هو متاح، ويمكن للخط الواحد إنجاز مهام تنظيف البيانات التي تتطلب مكتبات مساعدة بلغات أخرى.
إذا كنت في مجال الحوسبة العلمية، فقد تكون قد صادفت فكرة أنظمة إدارة سير العمل والبحث القابل لإعادة الإنتاج. يعتمد كلاهما على تنفيذ عمليات تحويل البيانات من طرف إلى طرف وسير العمل للقضاء على الأنشطة اليدوية المعرضة للخطأ والمملة والنقر على الأنشطة التي يتعين على المحللين والعلماء القيام بها لتحويل بياناتهم إلى رؤى واستدلالات على التوالي.
في هذا العالم الجديد الشجاع، Perl5’يسمح التاريخ الغني له بالتألق كمكون لسير العمل أو كلغة تطبيق تقوم بتنفيذ عمليات سير العمل هذه.
CPAN: نظام بيئي للوحدة تم اختباره في المعركة
تستضيف شبكة أرشيف بيرل الشاملة (CPAN) أكثر من 200,000 وحدة عبر كل مجال يمكن تخيله. على الرغم من أن عروض علوم البيانات ليست واسعة مثل بايثون، إلا أن المكونات الأساسية للبناة المخصصين موجودة:
PDL (لغة بيانات بيرل) - الحوسبة الرقمية المتجهة مع صفائف N-الأبعاد المكتوبة بقوة (تغطي في العمق أدناه).
PDL::Stats - إحصاءات وصفية، وانحدار، وتجميع (k-means، مصغرة دفعة k-means)، وأكثر من ذلك، بنيت على رأس PDL ndarrays.
AI::MXNet، AI::TensorFlow - روابط التعلم العميق.
الإحصائيات::الانحدار، الإحصائيات::الوصف — الإحصائيات الكلاسيكية بدون تبعية PDL.
Text::CSV، Spreadsheet::XLSX، Data::MessagePack، Sereal - تسلسل عالي الأداء وI/O.
DBI + العشرات من برامج تشغيل قاعدة البيانات — وصول SQL إلى كل نظام RDBMS رئيسي.
MCE (Many-Core Engine) - توازي منظم لأحمال عمل الذاكرة المشتركة والموزعة.
Inline::C، Inline::CPP — تضمين C أو C++ التعليمات البرمجية مباشرة داخل ملف مصدر بيرل; يتم استدعاء المجمع بشفافية في المرة الأولى التي يتم فيها تشغيل البرنامج النصي، مما يجعل من التافهة لإسقاط نواة الأداء الحرجة في برنامج نقي بيرل خلاف ذلك دون نظام بناء XS كامل.
FFI::Platypus — وظائف الاتصال في أي مكتبة مشتركة (
.حتى/ديليب/.dll) من بيرل دون كتابة سطر واحد من XS أو C رمز الغراء. يدعم Platypus جميع الأنواع المكافئة C، والبنيات، واستدعاءات، والإغلاق، وهو الطريقة الحديثة لربط Perl بـ BLAS أو LAPACK أو HDF5 أو أي مكتبة أصلية أخرى.
بيرل الحديثة ليست جدك’s بيرل
يتم سحب الميزات أدناه مباشرة من ملاحظات الإصدار الرسمية (perl5360delta, perl5380delta, perl5400delta) ويتم تنظيمها من خلال الإصدار الذي وصلت فيه إلى حالة مستقرة أو تم تقديمها لأول مرة. يتم تمييز الميزات ذات الصلة بأحمال عمل علوم البيانات والحوسبة العلمية فقط.
بيرل 5.36 — مايو 2022
استخدام v5.36— تتيح حزمة الميزات الآن تلقائيًايستخدم التحذيراتبالإضافة إلىيستخدم الصارم. كما يؤدي إلى تعطيلغير مباشرصياغة استدعاء الأسلوب ومتعدد الأبعادمحاكاة hash-key، والقضاء على مصدرين مشتركين من الأخطاء الدقيقة.
(مستقر منذ 5.36؛ تجريبي منذ 5.20) — يتم الآن تعريف معلمات الوظيفة بالاسم، مع افتراضات اختيارية. الـ //= و ||= تمت إضافة عوامل تشغيل القيمة الافتراضية إلى التوقيعات في الإصدار 5.38، مما يسمح بالقيم الافتراضية التي يتم تشغيلها إلغاء تعريف أو زيف على التوالي:
use v5.36;
sub clamp ($val, $lo = 0, $hi //= 1) {
$val < $lo ? $lo : $val > $hi ? $hi : $val;
}
جزيرةعامل تشغيل مثيل الفصل (مستقر منذ 5.36؛ تم تقديمه في 5.32) -$obj isa "ClassName"إرجاع قيمة منطقية؛ أنظف منالمرجع($obj) eq "ClassName".**
مدمج(مستقر منذ 5.40 ؛ تجريبي منذ 5.36) - وظائف قابلة للاستيراد معجميا مدمجة مباشرة في المترجم. تتضمن حزمة 5.40 المستقرة، من بين أمور أخرى:سقيفة,دور— تقريب عدد صحيح بدونيستخدم POSIX.تقليم— إزالة مسافة بيضاء بادئة/لاحقة من سلسلة.مفهرس- أزواج كل عنصر مع مؤشره ؛ رفيق تعبيري إلى متعدد القيممن أجلسلاسل الجمل البرمجية (انظر أدناه).صحيح,خطأ,is_bool— كتب boolean sentinels; المسلسلات يمكن أن تنبعث الآن JSONصحيح/خطأبدلا من1/0.يضعف,استيقظ,is_weak— التحكم في عدد المراجع لبناء هياكل بيانات ثنائية الاتجاه دون تسرب للذاكرة.مبارك,نوع إعادة الكتابة,عنوان— فحص مرجعي.
تتبع منطقي مستقر (5.36) — يتم إنشاء قيم الاستهلاك كقيم منطقية (على سبيل المثال،
!!1) تحتفظ الآن بطبيعتها المنطقية من خلال التعيين، مما يتيح التسلسل الموثوق به على دراية بالنوع إلى JSON و MessagePack.متعدد القيم
من أجلالحلقات (مستقر منذ 5.40 ؛ تجريبي منذ 5.36) كرر على أزواج أو N-tuples دون حساب الفهرس اليدوي:
use v5.40;
use builtin 'indexed';
for my ($i, $val) (indexed @scores) { ... } # index and value
أو الحصول على قيم متعددة في نفس الوقت
use v5.40;
for my ($val1, $val2, $val3) (@scores) { ... }
تأجيلكتل* (تجريبية منذ 5.36) — حارس خروج النطاق الذي يدير رمز تنظيف دون قيد أو شرط عند خروج كتلة، سواء بشكل طبيعي أو عن طريق استثناء — بديل طبيعي لكائنات حماية النطاق القائمة على المدمرة ونمط مهم لإدارة الموارد في خطوط البيانات.
بيرل 5.38 — يوليو 2023
PERL_RAND_SEEDمتغير البيئة (5.38) — تعيين هذا المتغير قبل إجراء التشغيلراندمكالمة (بدون صريح)جراند) ينتج نفس التسلسل، مما يتيح خوارزميات عشوائية قابلة لإعادة الإنتاج — عمليات المحاكاة وأخذ العينات العشوائية وأساليب مونت كارلو — دون تعديل التعليمات البرمجية المصدر.فئة اجتماعية/حقل/طريقةالصياغة (تجريبية منذ 5.38) — نظام كائن مصمم لغرض معين ومجال معجمي لا يتطلب أي منهمابركةولا@ISAولا أي وحدة CPAN. مفيد لتعريف كائنات القيمة المكتوبة مثل صفوف مجموعة البيانات أو معلمات النموذج أو مراحل مسار العمليات:
use feature 'class';
no warnings 'experimental::class';
class Vector2D {
field $x :param;
field $y :param;
method magnitude { sqrt($x**2 + $y**2) }
}
my $v = Vector2D->new(x => 3, y => 4);
say $v->magnitude; # 5
بيرل 5.40 — يونيو 2024
محاولة/القبضمعالجة الاستثناء (مستقر منذ 5.40 ؛ تجريبي منذ 5.34 ؛أخيرًاتمت إضافة الكتلة في 5.36) — أصبح التعامل مع الاستثناءات المهيكلة الآن ميزة أساسية للغة؛ ولا يلزم وجود وحدة CPAN:
use v5.40;
try {
my $result = load_and_process($file);
}
catch ($e) {
warn "Pipeline error: $e";
}
finally {
close_resources(); # runs whether or not an exception was thrown
}
(جرب::صغير / ميزة::Compat::جرب هناك حاجة فقط عند استهداف بيرلز أقدم من 5.34.)
متعدد القيم
من أجلالحلقات (مستقرة منذ 5.40) - انظر 5.36 دخول أعلاه؛ تخرجوا من تجريبية إلى مستقرة في هذا الإصدار.المدمج::infوالمدمج::نان(تجريبية منذ 5.40) — ثوابت الفاصلة العائمة المكتوبة والثوابت غير الرقمية، مما يؤدي إلى التخلص من9**9**9أو اختراقات POSIX في الكود الرقمي.^^عامل تشغيل XOR المنطقي (5.40) — يكمل مجموعة عوامل التشغيل المنطقية ذات الأسبقية المتوسطة (&&,||,^^)؛ مفيد لعمليات القناع المنطقي.استخدام v5.40استيراد الوظائف المضمنة — بما يتجاوز تمكين حزمة الميزات،استخدام v5.40أيضا استيراد المقابلةمدمجحزمة الإصدار، مما يجعل كل مستقرةالمدمج::الدوال المتاحة كأسماء قصيرة دون فصليستخدم المدمجبيان.
ميزات قديمة (pre-5.36)
قالوالولاية(منذ 5.10) —قالهوطباعةمع خط جديد ضمني؛الولايةيعلن المعجم الذي يستمر عبر الاستدعاءات من الضميمة الفرعية (بدائية المذكرة خفيفة الوزن).
** المراجع من الدرجة الأولى والإغلاق** - الغواصات المجهولة، والإغلاق، والبناء المرجعي أساسي وكانت مستقرة منذ بيرل 5.
يستخدم الثابتأو CPANللقراءة فقطوحدة الثوابت المسماة ؛للقراءة فقطيفرض الثبات العميق الذييستخدم الثابتلا.
مدمج مع عربدة أو تلفن لإدارة الإصدارات و كرتون بالنسبة إلى لقطات التبعية القابلة لإعادة الإنتاج، يبدو مشروع Perl الحديث ويشبه جهدًا هندسيًا للبرامج من الدرجة الأولى.
قيود صادقة
لا توجد حالة لبيرل كاملة دون صدق حول مكان قصورها:
- التصوير — بيرل ليس لديه ما يعادل
ggplot2أوقطعة صغيرة. تتطلب المخططات عادةً مكالمة خارجية إلى R أو gnuplot أو مكتبة ويب. في بعض الأحيان، يمكن أن يصبح هذا الضعف قوة فعلية، مما يسمح للمرء باستخدام Perl5 كلغة تطبيق تنظم وتعزز الجهات الفاعلة الأخرى.
الزخم المجتمعي - تجمع مجتمع علوم البيانات على بايثون و R. إن العثور على دروس جاهزة وإجابات تجاوز المكدس والمؤلفين المشاركين أصعب.
توجيه الكائن - بدون موس / مو نموذج OOP مطول ؛ معهم يضيف تبعية. الجديد
فئة اجتماعيةقد تحل الميزة بعض هذه المشكلاتاكتب السلامة على نطاق واسع — اللغة الأساسية’تجعل الاستهلاكات الديناميكية قواعد كود رقمية كبيرة وتعاونية أكثر صعوبة في التفكير فيها (انظر القسم التالي).
2. نظام Perl Data-Type — نقاط القوة وحدود Cache-Era
أنواع بيرل الأساسية
بيرل’مركز نموذج البيانات الأساسي على ثلاثة بنى:
| بناء | سيجل | ما يحمله |
|---|---|---|
| الاستهلاك | $ |
قيمة واحدة: رقم أو سلسلة أو مرجع أو إلغاء تعريف |
| الصفيف | @ |
قائمة مرتبة من الحروف، مفهرسة بعدد صحيح |
| ** هش** | % |
مجموعة غير مرتبة من قيم الاستهلاك التي تم إدخالها بواسطة السلسلة |
كل شيء آخر — الكائنات، الإغلاق، هياكل البيانات المعقدة — مبني من هذه القيم البدائية الثلاثة عبر المراجع (\@array, \%شفرة هاش, تحتي { ... }).
هذا النموذج مرن للغاية. يمكن أن يحتوي الصفيف الواحد على أعداد صحيحة وأرقام فاصلة عشرية وسلاسل ومراجع متداخلة في وقت واحد. هذه المرونة هي بالضبط ما جعل بيرل اللغة المهيمنة لإدارة النظام وكتابة الويب لمدة عقدين.
مشكلة تدرج الذاكرة المخبئية
لا تحقق وحدات المعالجة المركزية الحديثة أقصى إنتاجية إلا عند تدفق البيانات عبر ذاكرة التخزين المؤقت L1/L2/L3† في كتل كبيرة ومتجاورة — خاصية تسمى الموقع المكاني. صفائف Perl لا توفر هذا. تحت غطاء محرك السيارة، صفيف بيرل هو صفيف C من مؤشرات إلى كومة مخصصة (SV) الهياكل. يحمل كل مقياس عدد مرجعي وعلامة نوع وحشو - عادة 24-56 بايت لكل استهلاك على بناء 64 بت. وبالتالي فإن تكرار أكثر من مليون عنصر من صفيف بيرل ينطوي على مليون مؤشر متناثر عبر الكومة، مما ينتج نمطًا لخطأ الذاكرة المخبئية ينفي تمامًا ميزة السرعة لخطوط أنابيب SIMD الحديثة.
نتيجة ملموسة: منتج نقطة من اثنين من ناقلات 1 000 عنصر مكتوبة في بيرل النقي هو تقريبا 100-1000 × أبطأ من العملية المكافئة على زوج من ndarrays تعويم PDL، والتي تحتل منطقتين مسطحتين، 4 000 بايت منطقة الذاكرة التي تناسب بشكل مريح في ذاكرة التخزين المؤقت L1.
قارن مع R
R تحتل أرضية وسط غريبة. مثل بيرل، إنها لغة ديناميكية ومفسرة - المتغيرات هي حاويات غير مكتوبة، والوظائف هي قيم من الدرجة الأولى، و REPL التفاعلي هو بيئة التطوير الأساسية. R حتى لديه نظائر مباشرة إلى بيرل’الأنواع الثلاثة الأساسية:
| مفهوم بيرل | R التناظرية |
|---|---|
$scalar المتجه الذري length-1 أو قائمة الاستهلاك |
|
@array |
أسلوب القائمة |
%hash |
مسمى أسلوب القائمة |
المرجع (\@arr) |
لا يستخدم R مراجع صريحة؛ دلالات النسخ عند التعديل بدلاً من ذلك |
لكن R’s workhorse type، أي atomic vector ليس له نظير Perl مباشر. المتجه الذري R هو كتلة متجاورة ومكتوبة بشكل متجانس من الذاكرة - بالضبط التخطيط الذي تكافئه ذاكرة التخزين المؤقت لوحدة المعالجة المركزية. كل فروة رأس مدمجة في R هي في الواقع ناقل ذري طوله 1 ؛ لا يوجد “أحادي القيمة” خارج ناقلات الذرية.
يعني اختيار التصميم هذا أن شفرة R تعمل بشكل طبيعي على ناقلات الملايين من الزوجي مع إنتاجية مستوى BLAS، دون أن يكتب المستخدم حلقة واحدة أو يخصص حلقة خاصة “صفيف” كائن.
RR’الأنواع الذرية هي:
| النوع الذري R | التخزين | C المكافئ |
|---|---|---|
منطق |
4 بايت / عنصر | عدد صحيح (بالإنجليزية: NA sentinel) |
عدد صحيح |
4 بايت / عنصر | int32_t |
مزدوج |
8 بايت / عنصر | مزدوج |
معقد 16 بايت/عنصر |
_مركب مزدوج |
|
رمز مؤشر إلى CHARSXP |
حرف * (متدرب) |
|
خام |
1 بايت / عنصر | uint8_t |
R يحدد أيضا الهياكل ذات المستوى الأعلى المبنية على ناقلات الذرية:
- مصفوفة - ناقل ذري ثنائي الأبعاد مع a
خافتالسمة. - صفيف - ناقل ذري N-D مع
خافتالسمة.
data.frame - قائمة مسمّاة بالنواقل الذرية المتساوية الطول؛
البيانات الجدولية في R. - عامل — متجه عدد صحيح مع
مستوياتالسمة؛ ترميز البيانات الفئوية.
الدرس: R’يتدفق أداء الحوسبة عند استخدامه في التطبيقات الإحصائية وعلوم البيانات مباشرة من ناقلاتها الذرية المتجاورة. بيرل’المسار المكافئ للأداء هو امتداد (وهو أيضًا مستقل ماتلاب مثل البيئة)، لغة بيانات بيرل لغة تعريف البيانات.
3. إدخال PDL: الصفائف N-Dimensional المكتوبة بشكل قوي
لغة بيانات بيرل (PDL، pdl.perl.org) يمتد بيرل مع ndarrays (صفائف N-dimensional): مخازن مؤقتة للذاكرة متجاورة ومكتوبة بقوة تبدو وكأنها كائنات بيرل من الدرجة الأولى.
use PDL;
# A 1-D float ndarray — 4 bytes × 5 elements in one contiguous block
my $v = float( 1.0, 2.0, 3.0, 4.0, 5.0 );
# A 128-dimensional random database of 1000 vectors — all in cache-friendly memory
my $db = random( 128, 1000 ); # double by default
# Dot product of every DB vector against a query — a single BLAS call
my $scores = $db x $query->transpose;
أنواع PDL البدائية
يعرض PDL لوحة الألوان الكاملة للأنواع الرقمية C كمكونات من الدرجة الأولى:
| نوع PDL | وحدات البايت | النوع C | المكون |
|---|---|---|---|
بايت |
1 | uint8_t |
بايت (...) |
قصور |
2 | int16_t |
قصيرة (...) |
قلعة |
2 | uint16_t |
ushort(...) |
طويل |
4 | int32_t |
طويل (...) |
الهند |
4 أو 8 | ssize_t |
إنديكس(...) |
طويل |
8 | int64_t |
طويلة (...) |
عائم |
4 | عائم |
عائم(...) |
مزدوج |
8 | مزدوج |
مزدوج (...) |
عرس |
8 | تعويم مركب _Complex |
تعويم(...) |
مزدوج |
16 | _مركب مزدوج |
cdouble(...) |
الخيوط و SIMD
واحدة من PDL’الميزات الأكثر تميزًا هي *خيوط ضمنية *: يتم بث العمليات تلقائيًا عبر أبعاد إضافية، مما يؤدي إلى التخلص من الحلقات الصريحة في رمز المستخدم وتفويض الحلقات الداخلية إلى نواة C أو Fortran المحسنة. مدمج مع set_autopthread_targ(N)، سوف PDL موازية تلقائيا شرائح مستقلة عبر لا سلاسل عمليات نظام التشغيل — دون أن يقوم المستخدم بكتابة واحدة شوكة أو الموضوع::قائمة الانتظار اتصل.
قيم غير صحيحة
PDL لديها مفهوم مدمج للقيم السيئة (PDL::سيئة)، مماثلة مباشرة لR’ss غير متاح. يمكن وضع علامة على مصفوفة ndarray على أنها “واعي بالقيمة السيئة”تقوم عمليات، وPDL بنشر الخطأ بشكل صحيح من خلال العمليات الحسابية والإحصائية وعمليات الإدخال/الإخراج.
4. نوع المقارنة: بيرل، PDL، وR جنبا إلى جنب
يخطط الجدول أدناه كل نوع R شائع الاستخدام إلى أقرب نظرائه من Perl و PDL، مع تسليط الضوء على المكان الذي تتفق فيه اللغات الثلاث أو تختلف أو تكمل بعضها البعض.
| نوع R | مكافئ Perl | مكافئ PDL | الملاحظات |
|---|---|---|---|
مزدوج (طول-1) $x = 3.14 (سكالار) |
مزدوج(3.14) — شكل () |
R ليس لديه مستعر; كل شيء متجه | |
عدد صحيح (طول-1) $n = 42 (سكالار) |
طويل(42) |
||
منطق (طول-1) علامة $ = 1 / $flag = 0 |
بايت(1) يستخدم بيرل الصدق؛ يستخدم PDL 0/1 بايت |
||
مزدوج متجه |
@arr = (1-1، 2-2، 3-3) |
مزدوج (1.1، 2.2، 3.3) PDL: متجاورة. @arr: مصفوفة المؤشر |
|
عدد صحيح متجه |
@arr = (1، 2، 3) |
طويل(1، 2، 3) |
|
منطق متجه |
@flags = (1، 0، 1) |
بايت (1، 0، 1) |
|
معقد متجه |
— (غير مضمن) | cdouble(...) احتياجات بيرل الرياضيات::Complex; PDL لديها دعم أصلي |
|
رمز متجه |
@strs = ('عام','كيف') |
— (غير رقمي) | PDL تعمل على الأرقام فقط |
خام متجه |
حزمة('C*', @bytes) |
بايت (...) |
|
غير متاح |
إلغاء تعريف |
القيمة غير الصحيحة في ndarray | يتم نشر القيم غير الصحيحة لـ PDL مثل R’ss غير متاح |
خالٍ |
إلغاء تعريف في سياق القائمة |
— | |
قائمة |
@array أو مرجع \@array |
— | |
مسمى قائمة |
%hash أو \%شفرة هاش |
— | |
ماتريكس (2-D) |
مصفوفة الصفائف @aoa |
2-D ندراي pdl([[...],[...]]) |
PDL: العمود الرئيسي؛ R: العمود الرئيسي |
صفيف (N-D) |
المراجع المتداخلة | N-D ndarray $x->reshape(...) |
|
data.frame |
%hash من @arrays |
2-D ndarray (أعمدة رقمية) + شفرة هاش بيرل (مختلطة) | لا يوجد تخطيط من نوع PDL واحد بالضبط |
عامل |
جدول البحث هاش + @indices |
طويل ندراي + بيرل @levels صفيف |
|
بيئة |
%hash أو مساحة اسم الحزمة |
— | |
وظيفة / إغلاق تحتي { ... } / إغلاق |
— | PDL PP يعرّف النواة المجمعة | |
كائن S3 / S4 |
المرجع المبارك + إرسال الأسلوب | كائن PDL (مصفوفة ndarray المبسطة) | كائنات PDL هي كائنات Perl من الدرجة الأولى |
الوجبات الرئيسية
بالنسبة إلى البيانات الرقمية المتجانسة النقية (الناقلات، والمصفوفات، والموترات)، وندرايز PDL والنواقل الذرية R متكافئة وظيفيا وفعالة نسبيا.
بالنسبة إلى البيانات الجدولية غير المتجانسة (الأنواع المختلطة وأعمدة السلاسل والعوامل)، R’ss
data.frameهو أكثر راحة؛ يستخدم بيرل عادة شفرة هاش من الصفائف أو وحدة مخصصة مثلالبيانات::FrameأوPDL::IO::CSV.ل النص، الهياكل غير النظامية، ونظام الغراء، بيرل’الأنواع الأصلية متفوقة على كل من R و Python.
وبالتالي، فإن مجموعة Perl+PDL توفر union لما تقدمه R كلغة إحصائية وما تقدمه Perl كلغة نظامية - على حساب منحنى تعليمي أكثر انحدارًا وأقل الأدوات الإحصائية المحدودة بشكل صريح.
ومع ذلك، فإن الجمع بين Perl+PDL+R (مع استخدام الأخير كمكون، أو فعال عبر بيرل)
5. خريطة الطريق: ما تغطيه بقية هذه السلسلة
توثق هذه السلسلة تكوين محرك قاعدة بيانات vector مضمن في Perl5 + PDL من البداية. تدعم قواعد بيانات المتجهات مسارات الإنشاء المعزز للاستعادة الحديثة (RAG) والبحث الدلالي وأنظمة التوصية الأقرب إلى الجوار. تطبيق واحد من المبادئ الأولى هو وسيلة ممتازة لإظهار PDL’s القدرات العددية جنبا إلى جنب مع بيرل’نقاط قوة برمجة الأنظمة.
يحتوي الدليل الذي تم تطويره جنبًا إلى جنب مع هذه المنشورات على المكونات التالية، والتي سيكون كل منها موضوعًا لواحدة أو أكثر من المنشورات المخصصة التي ستشير إلى الملفات في مستودع مخصص.
المشاركة 1 - التسلسل والإدخال/الإخراج: VectorIO الوحدة النمطية
ملف: VectorIO.pm
المحرك يخزن ناقلات كما معبأة بلوب ثنائي داخل MessagePack الحمولات. هذا المقال يغطي:
- تصميم وحدة مع نظافة
المُصدِّرواجهة برمجة التطبيقات العامة المستندة إلىاستخدام v5.40. - مساعدو المراجعة الذين يفرضون صحة المخطط عند حدود النظام.
Post 2 — محاكاة قاعدة بيانات متجهات
ملف: simulate_vectorDB.pl
قبل أن نتمكن من البحث في قاعدة بيانات نحتاج إلى واحدة. هذا المنشور يظهر:
- توليد ناقلات عشوائية قابلة لإعادة الإنتاج مع
PDL::عشوائي. - استخدام
GetOpt::طويللتحليل خيار CLI المريح. - كتابة a
--البذورالمحاكاة التي يتم التحكم فيها والتي تنتج قواعد بيانات متطابقة عبر عمليات التشغيل - ضرورية لقياس الأداء.
آخر 3 — قياس: timing_DB الوحدة النمطية
ملف: timing_DB.pm
تتطلب مطالبات الأداء قياسًا. يقدم هذا المنشور:
- تسخير قياس بيرل قابل لإعادة الاستخدام مبني على
الوقت::HiRes. - منهجية للمقارنات العادلة على مدار الساعة بين عمليات تنفيذ Perl/PDL وR.
- تفسير الإنتاجية (الموجهات/الثانية) مقابل زمن الوصول (مللي ثانية/الاستعلام) لأحجام أحمال العمل المختلفة.
Post 4 — K-Means تجميع مع PDL::الإحصائيات::Kmeans
ملف: kmeans.pl
K-means clustering هو العمود الفقري لنهج مؤشر الملف المقلوب (IVF) لتقريب أقرب بحث جار. هذا المقال يغطي:
- ال
PDL::الإحصائيات::Kmeansالواجهة وعقد الإرجاع الخاص بها (غنيمة,العنقود,لا,R2,ss). - تفسير
[هوس × عناقيد]تم إرجاع قناع العضوية بواسطةrun_kmeans. - مقارنة Perl/PDL k-means centroids ضد R’ss
kmeans()وClusterR::MiniBatchKmeans()للتحقق من صحة الأرقام.
Post 5 — Mini-Batch K-Means: التوسع إلى مجموعات البيانات الكبيرة
ملف: compare_kmeans_centroids.pl
يتطلب k-means الكامل كل البيانات في الذاكرة لكل تكرار. مجموعة صغيرة k يعني يتداول كمية صغيرة من دقة سنترويد لانخفاض كبير في الذاكرة والحوسبة. هذا المقال يستكشف:
- تنفيذ سلسلة جمل برمجية صغيرة تم إعادة أخذ عينات منها في PDL.
- قياس انجراف الدرقية المركزية بين متغيرات الدفعات الكاملة والمصغرة.
- الإخراج جنبا إلى جنب مع R’ss
MiniBatchKmeansمنClusterRحزمة.
Post 6 — Inverted File Index (IVF) بحث
ملف: compare_ivf_search.pl
مع سنترويد في متناول اليد يمكننا تقسيم قاعدة البيانات وإجراء خط فرعي تقريبي أقرب بحث الجوار. هذا المقال يغطي:
- بناء القوائم المقلوبة: رسم خرائط لكل ناقل قاعدة بيانات إلى أقرب سنترويد له.
- ال
unpack_inverted_listsيساعدVectorIO. - Querying: العثور على أعلى K أقرب سنترويدات، ثم البحث فقط تلك القوائم.
- دقة مقابل سرعة المقايضات كما عدد من القوائم التحقيق يختلف.
Post 7 — التحقق ضد R: التصحيح العددي وخطوط الأنابيب عبر اللغات
الملفات: compare_kmeans_centroids.R, compare_kmeans_centroids_pure.R, plot_centroid_coordinates.R
آخر مشاركة في سلسلة الأساس يغلق حلقة بين بيرل وR:
- تصدير نتائج PDL إلى CSV وقراءتها في R للتحقق المستقل.
- استخدام ggplot2 لتصور إحداثيات سنترويد من كلتا اللغتين في وقت واحد.
- نمط سير عمل لـ “الحوسبة في بيرل، التمثيل المرئي في R” التي تستفيد من نقاط القوة في كل من النظم الإيكولوجية.
التالي — نشر 1: التسلسل وI / O مع
VectorIO.pm
† تحتوي وحدات المعالجة المركزية الحديثة على مستويات متعددة من الذاكرة السريعة على الشريحة تسمى الذاكرة الوسيطة (L1، L2، L3) التي تقع بين أنوية المعالج وذاكرة الوصول العشوائي الرئيسية. L1 هو الأصغر (عادة 32-64 كيلوبايت لكل نواة) والأسرع (زمن انتقال دورات الساعة 1-4)؛ L2 أكبر (256 كيلوبايت - 1 ميغابايت) وأبطأ قليلاً؛ تتم مشاركة L3 عبر النوى (4-64 ميغابايت) مع زمن انتقال أعلى لا يزال. تجلس ذاكرة الوصول العشوائي الرئيسية بعيدًا عن زمن الوصول من 60 إلى 100 ns - أبطأ بمقدار 200 × تقريبًا من L1.
عندما تمس الحوسبة الذاكرة بنمط متجاور يمكن التنبؤ به، يمكن للجهاز prefetcher تحميل البيانات القادمة إلى L1/L2 قبل الحاجة إليها، مما يحقق إنتاجية قريبة من الذروة. تهزم عملية مسح المؤشرات المتفرقة (مثل اجتياز صفيف Perl من عمليات المسح المخصصة للكومة) عملية السحب المسبق، مما يؤدي إلى إيقاف وحدة المعالجة المركزية (CPU) أثناء انتظار حل كل خطأ في ذاكرة التخزين المؤقت من ذاكرة الوصول العشوائي (RAM).
