-
المساهمات
1068 -
تاريخ الانضمام
-
تاريخ آخر زيارة
-
عدد الأيام التي تصدر بها
43
نوع المحتوى
ريادة الأعمال
البرمجة
التصميم
DevOps
التسويق والمبيعات
العمل الحر
البرامج والتطبيقات
آخر التحديثات
قصص نجاح
أسئلة وأجوبة
كتب
دورات
كل منشورات العضو Ali Haidar Ahmad
-
يمكن تحسين خوارزمية التجميع K-mean باستخدام تقنيات تهيئة أفضل وتكرار (إعادة بدء) الخوارزمية. يمكنك قراءة المقال التالي لفهم الخوارزمية بشكل أفضل.
-
هناك أربعة مناهج أساسية للتعلم الآلي: التعلم بإشراف والتعلم غير الخاضع للإشراف والتعلم شبه الخاضع للإشراف والتعلم المعزز. يعتمد نوع بيانات الخوارزمية التي يختار المبرمج استخدامها على نوع البيانات التي يريد أن يتوقعها. تعد خوارزميات التعلم غير الخاضعة للإشراف جيدة للمهام التالية: 1- التجميع Clustering: تقسيم مجموعة البيانات إلى مجموعات على أساس التشابه. 2- كشف الشذوذ Anomaly detection: تحديد نقاط البيانات غير العادية في مجموعة البيانات. 3-التنقيب عن الترابط Association mining: تحديد مجموعات العناصر في مجموعة البيانات التي تحدث بشكل متكرر معًا. 4- تقليل الأبعاد Dimensionality reduction: تقليل عدد المتغيرات في مجموعة البيانات. - بالعودة لسؤالك فإن إجابته هي نفس إجابة السؤال "ماهي استخدامات التعلم الالي في حياتنا؟" وذلك ﻷن التعلم غير الخاضع للإشراف هو نهج للتعلم الآلي، والتعلم الآلي بدوره هو فرع من فروع الذكاء الصنعي وبالتالي فإن إجابة سؤالك تجدينها هنا.
-
لا تحتاج إلى تعريف دوال، يمكنك استخدام Dir::exist? مباشرةً كالتالي: Dir.exist?('Directory Name') حيث تعيد true إذا كان موجود وإلا false.
-
- تُستعمَل الدّالة exec() لتنفيذ شيفرة بايثون ديناميكيًّا (وهذا هو الفرق الجوهري). بينما تُستخدم الدّالة eval() لتقدير (evaluate) قيمة تعبير في بايثون. يتم تقدير التعبير المُعطى باستخدام معامل الكائنات العامّة globals والكائنات المحليّة locals. - الشكل العام للدالة exec: exec(object[, globals[, locals]]) حيث أن object يمثل سلسلة نصيّة تمثل شيفرة بايثون المُراد تنفيذها ديناميكيّاً. أما globals معامل اختياري يمثّل قاموس يُمثّل الكائنات العامّة التي ستُمرّر إلى قيمة المُعامل object. أخيراً locals معامل اختياري، يمثّل قاموس أو كائن ارتباط (mapping) يمثّل الكائنات التي ستمرر إلى قيمة المعامل object. إن لم تمرر قيمة لهذا المُعامل، فستكون قيمته هي قيمة القاموس globals. - الشكل العام للدالة eval: eval(expression, globals=None, locals=None) نفس المعاملات في الدالة السابقة، لكن هنا expression في السلسلة نصيّة التي تمثل تعبير بايثون المُراد تقديره. - القيمة المعادة للدالة exec هي القيمة None مع تنفيذ الشّيفرة المُعطاة. إن لم تُمرر قيمة لكل من المُعامل globals والمعامل locals فستُنفَذ الشيفرة في البيئة التي استُدعيت فيها الدالة. وتطلق استثناءات إن كانت هناك أخطاء في بنية الشّيفرة. - القيمة المعادة للدالة eval هي نتيجة تقدير التعبير المُعطى. إن لم تمرر قيمة لكل من المعامل globals والمعامل locals فسيُنفّذ التعبير في البيئة التي استُدعيَت فيها الدالة. وتُطلق استثناءات إن كانت هناك أخطاء في بنية التعبير.
-
الأفضل استخدام الدالة ()os.cpu_count، حيث تُعيد عدد المعالجات المتوفرة في النظام. مثلاً: from os import cpu_count cpu_count() # 2 ملاحظة: لا يُساوي عدد المُعالجات المُعاد من هذه الدالة عدد المعالجات التي يُمكِن للعملية استخدامها (هذا ينطبق على الطرق المُستخدمة في الإجابة السابقة). يُمكِنك الحصول على ذلك عبر استخدام: len(os.sched_getaffinity(0))
-
يمكنك إنجاز ذلك فقط بسطر واحد كما يلي: l = [None] * 10 l # [None, None, None, None, None, None, None, None, None, None] الآن لإسناد قيمة لأحد عناصر هذه القائمة: l[1] = 5 l # [None, 5, None, None, None, None, None, None, None, None] يمكنك أيضًا تهيئتها بقيم عددية، مثلاً باستخدام الدالة range: l = range(10) l #[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
-
التعديل على الملفات يجب أن يكون دقيقًا. هنا سأعرّف التابع التالي الذي يمكّنك من إنجاز المطلوب: from tempfile import mkstemp from shutil import move, copymode from os import fdopen, remove # نمرر المسار والسطر المراد استبداله و السطر الجديد def replace(file_path, pattern, subst): # ننشئ ملف مؤقت fh, abs_path = mkstemp() with fdopen(fh,'w') as new_file: with open(file_path) as old_file: # نمر على أسطر الملف القديم for line in old_file: # نكتب في الملف الجديد هذا السطر + استبدال السطر القديم بالجديد عندما نجده new_file.write(line.replace(pattern, subst)) # ننسخ أذونات الملف من الملف القديم إلى الملف الجديد copymode(file_path, abs_path) # نحذف الملف القديم remove(file_path) # ننتقل للملف الجديد move(abs_path, file_path)
-
الإجابة السابقة تحدد قيمة للمتغير، وهذا لايتطابق مع المطلوب. يمكنك الإعلان عن متغيييرات في بايثون ومن دون إعطاء أي قيمة ابتدائية لها كما يلي: variable_name:type مثلاً: name:str x:int y:float هنا أعلنت عن 3 متغيرات؛ الأول من الصنف str والثاني من الصنف int والثالث من الصنف float. يعتقد البعض أن ذلك ليس له أهمية كون لغة بايثون ديناميكية، لكن شخصيًّا أحتاج في بعض الأحيان إلى الإعلان عن المتغيرات قبل استخدامها.
-
لاتحتاج لاستخدام أيّة دوال لإنجاز ذلك، مجرد سطرين كما يلي: ini_dict['الاسم القديم'] = ini_dict['الاسم الجديد للمفتاح'] del ini_dict['الاسم الجديد للمفتاح'] مثال: # تعريف قاموس ini_dict = {'nikhil': 1, 'vashu' : 5, 'manjeet' : 10, 'akshat' : 15} # طباعة القاموس print ("initial 1st dictionary", ini_dict) # تغيير أسماء المفاتيح ini_dict['akash'] = ini_dict['akshat'] del ini_dict['akshat'] # طباعة القاموس بعد التعديل print ("final dictionary", str(ini_dict)) الخرج: initial 1st dictionary {‘akshat’: 15, ‘nikhil’: 1, ‘manjeet’: 10, ‘vashu’: 5} final dictionary {‘akash’: 15, ‘nikhil’: 1, ‘manjeet’: 10, ‘vashu’: 5}
-
في النسخ الأحدث من روبي أصبح بإمكانك إتمام ذلك (الأحدث من 1.8) بالشكل التالي: File.write("public/temp.json",tempHash.to_json) بالنسبة للنسخ الأقدم يمكن أيضًا إنجاز ذلك كما في الإجابة السابقة.
-
هناك عدة حالات، وكل حالة لها طريقة محددة. 1. كائنات غير مضمنة Objects that are not built-in. في هذه الحالة نستخدم الدالة getsource من الوحدة inspect. مثلاً، هنا سنعرض الكود المصدر للدالة randint من الوحدة random: import random import inspect print(inspect.getsource(random.randint)) الخرج: Output: def randint(self, a, b): """Return random integer in range [a, b], including both end points. """ return self.randrange(a, b+1) إذا أردت معرفة موقع الملف الخاص بها: print(inspect.getfile(random.randint)) # c:\Python35\lib\random.py 2. الدوال التي يتم تعريفها من المستخدم: هنا نستخدم dill.source.getsource، حيث أن الطريقة السابقة لاتنفع هنا. # تعريف دالة ما def add(a, b): return a + b print(add.__code__.co_filename) # Output: <stdin> import dill print (dill.source.getsource(add)) الخرج: def add(a, b): return a + b 3 الدوال المُضمنة في بايثون Built-in objects. لايمكن معرفتها إلا من خلال الذهاب إلى الكود المصدر لبايثون والاطلاع عليها من هناك source.
-
يمكن إنجاز ذلك بسطر واحد فقط من خلال الدالة sort_together المصممة خصيصاً لهذا: from more_itertools import sort_together X = ["r", "s", "t", "u", "v", "w", "x", "y", "z"] Y = [ 0, 1, 1, 0, 1, 2, 2, 0, 1] s = sort_together([Y, X])[1] print(list(s)) أو من خلال استخدام الدالة sorted: A = ["r", "s", "t", "u", "v", "w", "x", "y", "z"] B = [ 0, 1, 1, 0, 1, 2, 2, 0, 1] result_list = [i for _,i in sorted(zip(B,A))] print(result_list) الخرج: ['r', 'u', 'y', 's', 't', 'v', 'z', 'w', 'x'] حيث نستخدم دالة zip لإنشاء كائن ثالث من خلال الجمع بين القائمتين المحددتين. أي الأولى التي يجب فرزها والثانية التي يعتمد عليها الفرز. يمكننا بعد ذلك استخدام الدالة Sorted، التي تستخرج العناصر الأولى من كل زوج من القوائم المعينة من القائمة التي تم فرزها وتنفيذ zipped عليها. يمكنك أيضًا استخدام argsort: A = ["r", "s", "t", "u", "v", "w", "x", "y", "z"] B = [ 0, 1, 1, 0, 1, 2, 2, 0, 1] import numpy A = numpy.array(A) B = numpy.array(B) inds = B.argsort() sorted_a = A[B] print(sorted_a)
-
يمكنك استخدام passthru كما يلي: ob_start(); passthru('/usr/bin/python2.7 /srv/http/assets/py/switch.py arg1 arg2'); $output = ob_get_clean(); وإذا كنت تريد معرفة حالة الإرجاع return والحصول على خرج stdout بالكامل، فيمكنك استخدام exec: $command = 'ls'; exec($command, $out, $status); $ out عبارة عن مصفوفة تحتوي جميع الأسطر و $status هي حالة الإرجاع. وهذه الطريقة مفيدة جداً في حال أردت تصحيح الأخطاء لأنها تعطيك حالة الإرجاع.
-
عليك أولًا التعرّف عليها. بدايةً، يجب أن تعلم أنه يمكن استخدامها كداالة أو كمُزخرف decorator لتحويل تابع إلى خاصيّة. تعيد الدالة property() خاصيّة يُمكن التحكم بها (خاصيّة مُدارة -property object-) لها تابع للحصول على قيمتها، وتابع تعيين قيمة لها، وتابع حذف قيمتها، ولها سلسلة توثيق (docstring) خاصّة بها (الكائن المُعاد يحتوي على الخاصيّات fget، وfset، وfdel التي تمثّل الدوال الممررة). لها البنية التالية: property(fget=None, fset=None, fdel=None, doc=None) fget الدالّة التّي ستُستخدم للحصول على قيمة الخاصيّة. fset الدالّة التّي ستُستخدم لتعيين قيمة للخاصيّة. fdel الدالّة التّي ستُستخدم لحذف قيمة الخاصيّة. doc سلسلة توثيق الخاصيّة. مثال: class C: def __init__(self): self._x = None def getx(self): return self._x def setx(self, value): self._x = value def delx(self): del self._x # إنشاء الخاصيّة x = property(getx, setx, delx, "The 'x' property.") الكائن c نسخة من الصنف C، فالجملة c.x ستستدعي دالة الحصول على القيمة، وc.x = value ستستدعي دالة ضبط القيمة، وdel c.x ستستدعي دالة حذف قيمة الخاصيّة. إن أُعطِيَت قيمة للمعامل doc، فستكون قيمته هي سلسلة توثيق الخاصيّة. أما إن لم تمرر قيمة للمعامل، فستنسخ الخاصيّة سلسلة توثيق الدالة fget (إن كانت موجودة). ما يسمح بإنشاء خاصيّات قابلة للقراءة فقط (read-only) باستخدام الدالة property() كمُزخرف: class Parrot: def __init__(self): self._voltage = 100000 @property def voltage(self): """الحصول على قيمة الجهد الحاليّة""" return self._voltage يحوّل المُزخرِف @property الدالةvoltage() إلى دالة تحصل على قيمة الخاصيّة ذات نفس الاسم، وتكون سلسلة التوثيق الخاصة بالخاصيّة voltage هي السلسلة "الحصول على قيمة الجهد الحالية". ما يعني بأنك تستطيع الحصول على قيمة الخاصية voltage كما يلي (لاحظ أننا لم نستدعي الدالة voltage()): p = Parrot() p.voltage # 100000 كائن الخاصية يحتوي على الدالة getter للحصول على القيمة والدالة setter لضبط قيمة للخاصية وdeleter لحذف قيمة الخاصية، ويمكن استخدام هذه الدوال كمُزخرِفات تُنشئ نسخة من الخاصية ذات دوال مُتحكّمة تتمثل في الدوال المُزخرَفة. كما ترى فإن استخدامها يمنحنا الكثير من الميزات التحكمية، إضافةً إلى ذلك يجب أن تلاحظ أنها تجعل استخدام getter و setter أسهل بكثير في البرمجة الموجهة للكائنات.
-
بفرض لديك السلسلة النصية التالية: sentence = "My name is ffff" يمكنك استبدال أي كلمة بالشكل التالي: sentence ["ffff"] = "yyyy"
-
إذا كنت تريد معرفة ما إذا كان الكائن عبارة عن عدد صحيح أو يمكن تحويله إلى عدد صحيح، فيمكنك إجراء ذلك بالشكل التالي: result = Integer(obj) rescue false
-
يمكنك كتابة قائمة في ملف بالشكل التالي: # تعريف قائمة ما months = ['January', 'February', 'March', 'April'] # إنشاء/الكتابة على ملف with open('months.txt', 'w') as output_file: # المرور على كل قيمة في القائمة for month in months: # كتابتها في الملف والنزول سطر output_file.write(month + '\n') أو بالشكل التالي: output_file = open('months.txt', 'w') for month in months: output_file.write(month + '\n') output_file.close() والخرج يكون ملف بالشكل: January February March April
-
بما أنهما من الصنف Data (أو حتى لو كانوا من الصنف Datatime) فيمكنك حساب ذلك مباشرةً كالتالي: (end_date - start_date).to_i
-
الأمر بسيط، من خلال الحيلة التالية: # متغير منطقي foo التحقق مما إذا كان !!foo == foo أو: [true, false].include? foo
-
يمكنك إنجاز ذلك كالتالي: host = `hostname`.strip # \n وإزالة اللاحقة shell الحصول على اسم المضيف من الشل puts host # إخراج اسم المضيف أو الطريقة الأبسط من خلال host_with_port في controller.rb: host_port= request.host_with_port
-
يمكنك إنجاز ذلك في سطر واحد من خلال hash.delete، كما يلي: hash[:new_key] = hash.delete :old_key
-
الأداة الأفضل لإنجاز ذلك هي مكتبة التعابير المنتظمة re. حيث تمنحك حرية كاملة في تحديد أسس التقسيم التي تريدها. مثال: تقسيم سلسلة نصية على أساس الفراغات الفاصلة بين الكلمات. import re re.split('\s+', 'Please split this string') # ['Please', 'split', 'this', 'string']
-
اقترح الطريقة التالية، التي ستعطيك معلومات كل الأشخاص الذين اسمهم Pam بدلاً من إعطائك أول واحد فقط: if __name__ == '__main__': dicts = [ {"name": "Tom", "age": 10}, {"name": "Mark", "age": 5}, {"name": "Pam", "age": 7} ] key = "name" val = "Pam" d = next((d for d in dicts if d.get(key) == val), None) print(d) # {'name': 'Pam', 'age': 7} أول من خلال الاسم فقط (بدون المفتاح): if __name__ == '__main__': dicts = [ {"name": "Tom", "age": 10}, {"name": "Mark", "age": 5}, {"name": "Pam", "age": 7} ] val = "Pam" d = next(filter(lambda person: person['name'] == val, dicts)) print(d) # {'name': 'Pam', 'age': 7}