اذهب إلى المحتوى

عبدالباسط ابراهيم

الأعضاء
  • المساهمات

    4339
  • تاريخ الانضمام

  • تاريخ آخر زيارة

  • عدد الأيام التي تصدر بها

    11

أجوبة بواسطة عبدالباسط ابراهيم

  1. كما ترى في التعليقات فإنه توجد العديد من الطرق لتنفيذ المطلوب فمثلاً

    يمكنك استخدام for loop كالتالي

     x[[z for z in range(x.size) if not z in exclude]]

    قم بتحديد ال exclude من خلال list تحتوي على جميع العناصر التي لا تريدها

    كما يمكنك استخدام hstack كما في المثال التالي

    a = [0,1,2,3,4,5,5,6,7,8,9]
    
    np.hstack((a[:3], a[4:]))
    #قم بتحديد المقطع الذي تريد حذفه
    
    array([0, 1, 2, 4, 5, 5, 6, 7, 8, 9])
    

     

    • أعجبني 1
  2. بالإضافة لاستخدام repeat و broadcast_to يمكنك أيضاً استخدام الدالة np.tile بسهولة حيث تقوم بتحديد ال shape كالتالي

    import numpy as np
    
    a = np.array([[1,2],[1,2]])
    b = np.tile(a,(3, 1,1))
    
    b.shape
    (3,2,2)
    
    b
    array([[[1, 2],
            [1, 2]],
    
           [[1, 2],
            [1, 2]],
    
           [[1, 2],
            [1, 2]]])

     

  3. كما شرح محمد في التعليق السابق فهي تستخدم للقيام بجلب بعض البيانات في الخادم وهناك مهام نستخدمها في المتصفح 

    وهذه بعض الخصائص الخاص بال getInitialProps 

    • تستَخدَم لجَلْب بعض البيانات بشكل غير متزامن ، ويتم توليدها من خلال ال props

    • سيتم تنفيذ الدالة getInitialProps  على الخادم فقط.من تحميل الموقع المبدئي

    • يمكنك استخدامها في المتصفح من خلال ال routing

    • لا يمكننا استخدامها في ال children components 

    ويفضل استخدام getStaticProps أو getServerSideProps بدلا من getInitialProps. بداية من  Next.js 9.3 

    ويمكنك قراءة المزيد من المعلومات حول getStaticProps و getServerSideProps من خلال هذا السؤال

     

  4. يجب عليك فهم الخطأ أولاً

    [0]arr ليست مصفوفة، بل هي العنصر الأول من arr وبالتالي ليس لها أي أبعاد.

    حاول استخدام [0:1] بدلا من ذلك ، الذي سيعيد العنصر الأول من داخل lلمصفوفة صنف واحد واستخدام .np.concatenate بشكل طبيعي

    np.concatenate((arr, arr[0:1]))

    أو يمكنك تحويل العنصر [0]arr لمصفوفة 

    np.concatenate((arr, np.array([arr[0]])))

     

    • أعجبني 1
  5. يمكنك استخدام ال np.argsort 

    temp = np.random.randint(1,10, 10)
    
    temp
    array([5, 2, 7, 4, 4, 2, 8, 6, 4, 4])
    
    temp[np.argsort(-temp)]

    لاحظ أنه هذا الحل أسرع قليلاً نتيجة أنه لا يتم ضرب المصفوفة مرتين في السالب لعكس الإتجاه

    وغذا كنت تهتم لأمر السرعة كثيراً فيعتبر الحل الأسرع نسبياً هو np.flip عن بقية الحلول

    • أعجبني 1
  6. توجد العديد من الطرق المستخدمة سواء باستخدام python أو numpy  مثل استخدام numpy.bincounts أو collections.Counter كما يمكنك أيضاً استخدام np.unique كالتالي

    values, counts = np.unique(a, return_counts=True)
    
    ind = np.argmax(counts)
    print(values[ind])  # طباعة الرقم الأكثر تكراراً
    

    يمكنك أيضاً استخدام statistics.mode بداية من Python 3.4 

    from statistics import mode
    
    mode([1, 2, 3, 1, 2, 1, 1, 1, 3, 2, 2, 1])
    # 1

    وإذا كان هناك عدة عناصر بنفس التكرار وتريد إرجاعهم جميعاً نستخدم  statistics.multimode

    from statistics import multimode
    
    multimode([1, 2, 3, 1, 2])
    # [1, 2]

     

  7. يمكنك بالطبع تنفيذ ذلك من خلال numpy ولكن هناك حالتين لتنفيذ ذلك 

    • إذا كنت تريد التغيير في الدالة الأصلية يمكنك استخدام الدالة shape
      ar.shape = (-1, ncols)

      الكود السابق يقوم بالتعديل على shape المصفوفة الأصلية

    • أما إذا كنت تريد إرجاع مصفوفة جديدة يمكنك استخدام الدالة reshape كما تم الشرح في التعليقات السابقة

      new = np.reshape(arr, (-1, ncols))

       

  8. بالإضافة للشرح الوافي ل reshape كما في التعليق السابق ولكن إذا كانت هناك العديد من الأبعاد

    وتحتاج عمل flat للكل عدا البعد الأخير يمكنك استخدام الحل التالي

    arr = numpy.zeros((50,100,25))
    new_arr = arr.reshape(-1, arr.shape[-1])
    new_arr.shape
    
    # (5000, 25)

    أو مثلاً عدا آخر بعدين 

    arr = numpy.zeros((3, 4, 5, 6))
    new_arr = arr.reshape(-1, *arr.shape[-2:])
    new_arr.shape
    # (12, 5, 6)

    لاحظ مثال آخر

    arr = numpy.zeros((3, 4, 5, 6, 7, 8))
    new_arr = arr.reshape(*arr.shape[:2], -1, *arr.shape[-2:])
    new_arr.shape
    # (3, 4, 30, 7, 8)

     

    • أعجبني 1
  9. تعتبر تقنية ال PWA ما هي إلا موقع تم أعداده مسبقاً للعمل ك PWA والفرق بين الموقع العادي وال PWA هو زيادة مميزات التطبيقات على الموقع مثل إمكانية العمل بدون إنترنت أو التنبيهات وإمكانية تثبيته كل هذه الخصائص يتم إضافتها للموقع من خلال تقنية ال PWA بواسطة service workers وweb app manifests يمكنك البحث عنهما للمزيد من المعلومات

    لذلك تعتمد تطبيقات ال PWA على المتصفح واللغات المستخدمة في الويب وهو ليس إطار عمل مثلاً 

    بينما في  react native and flutter يتم التعامل مع ال native api 

    ويمكنك رفع تطبيق ال PWA على أي متجر ولكن ليس apple store على ما أعتقد ويعمل كأي تطبيق تم بناءه من خلال react native and flutter ولكن مع بعض الإختلافات البسيطة

    تعتبر تطبيقات ال PWA أكثر سهولة عن غيرها ولكن ليست في مثل قوة التطبيقات الأخرى 

    لذلك يمكنك إختيار التيقنية التي تخدم أهدافك

  10. يمكنك استخدام ravel أو flatten أو flat ولكن لكل دالة هدف حيث أن 

    • ravel تقوم بإرجاع view من المصفوفة أي أنه عند التغيير في المصفوفة الجديدة تطبق التغييرات على المصفوفة القديمة 
      a = np.array([[1,2,3], [4,5,6]])
      
      b = a.ravel()
      
      b
      array([1, 2, 3, 4, 5, 6])

       

    • بينما flatten تقوم بإرجاع نسخة أو copy من المصفوفة القديمة 

       c = a.flatten()

       

    • إنما flat تقوم بإرجاع iterator وليس مصفوفة 

      d = a.flat

       

    • أعجبني 1
  11. بتاريخ 21 دقائق مضت قال موسى علي الشمراني:

    اشتركت اليوم ولكن يوجد ممكن تم تحديث الدورات ولم يتم تعديل وصف الدورة ومسارتها علما باني اشتركت حسب الوصف

    اخي انا مشترك ولكن فية وصف الدوره 

    ستتعلم كيفية بناء واجهة برمجية API لتطبيق جوال وفق أفضل الأساليب المتبعة. ولايوجد درس متعلق بهذا الوصف

    كذالك لايوجد اي درس متعلق بالتخزين السحابي

    فجميع الروابط المرسلة من قبلك تختلف اختلاف تام عن ما ذكر

    شاكر ومقدر لكم

    لاحظ هذا الرابط  يحتوي على مسار كامل لبناء API 

    أما بالنسبة التعامل مع خدمات التخزين السحابي AWS S3 فهناك تطبيق كامل لبناء موقع نستخدم فيه AWS S3 

  12. ربما تم تحديث المسارات ولكن بالنسبة

    • للدروس الخاصة بال API فهي موجودة في هذا الرابط 
    • والدروس الخاصة بالتعامل مع خدمات التخزين السحابي AWS S3 فستجدها في المشروع تطبيق مشاركة الفيديوهات والجزء الخاص بال AWS S3 ستجده أيضاً في هذا الرابط 

    بالطبع يمكنك الدخول للروابط السابقة إذا كنت مشترك في دورة تطوير تطبيقات الويب باستخدام لغة PHP ويفضل الإلتزام أيضاً بترتيب الدروس حتى لا تفوت جزء مهم من الشرح

  13. يمكنك أيضاً بما أنك تستخدم list بواسطة python

    • إنشاء list فارغة وإضافة البيانات التي تريدها 
    • ثم في الأخير تقوم بتحويلها ل numpy array
      import numpy as np
      
      list = []
      
      list.append([1,3,5])
      list.append([2,4,6])
      
      array2 = np.array(list)
      
      print(array2)
      #الناتج:
      
      #[[1 3 5]
      # [2 4 6]]

       

    ولاحظ أنه في حالة كنت تستخدم for loop سيكون من الأفضل استخدام list ثم تحويلها لمصفوفة بدلاً من عمل append لمصفوفة numpy بداخل ال for loop إذا كنت تهتم للسرعة

    • أعجبني 1
  14. يمكنك بالطبع عن طريق تغيير إعدادات الطباعة من خلال set_printoptions  بواسطة المعامل suppress=True كما في التعليقات السابقة ولكن أحياناً تحتاج لتنفيذ هذه الإعدادت locally ويمكنك عمل ذلك من خلال context manager لذلك يكون الكود كالتالي

    x = np.random.random(10)
    with np.printoptions(precision=3, suppress=True):
        print(x)
        # [ 0.073  0.461  0.689  0.754  0.624  0.901  0.049  0.582  0.557  0.348]

    لاحظ أنه إذا قمت بالطباعة خارج هذا ال context manager سترجع إعدادات الطباعة كما كانت

    print(x)    
    # [ 0.07334334  0.46132615  0.68935231  0.75379645  0.62424021  0.90115836
    #   0.04879837  0.58207504  0.55694118  0.34768638]

     

  15. نعم يمكنك تنفيذ المطلوب بواسطة الكود التالي

    app.get(/^\/(posts|articles)\/(.+)/, function (req, res, next) {
     
    });

    لاحظ أن 

    • (+) يعني وجود slug حيث أن يجب أن يحتوي حرف واحد للتأكيد من وجود ال slig

    أو يمكنك استخدام الحل التالي

    app.get('/:type(posts|articles)/:id', ...)

     

  16. كما تم التوضيح في التعليق السابق أنه sign لا تعني أن ال cookies ستكون مخفية ولكن سيتم إضافة توقيع إليها وهناك بعض الفروقات بين cookie و signed cookie

    • لا يمكننا تحديد ما إذا كانت البيانات التي يتم إعادتها يتم تعديلها من قبل العميل أم لا. ذلك في حالة ال cookie بينما العكس في ال signed cookie يمكننا تحديد ما إذا كانت البيانات التي يتم إعادتها يتم تعديلها من قبل العميل أم لا

    • ويضاف التوقيع كجزء من ال sigendCookie  إلى جانب بيانات sigendCookie الفعلية وهذا التوقيع معروف من ناحية السيرفر فقط

  17. يمكنك عمل untrack لمجلد أو ملف ما حيث عند عمل untrack له سيتجاهله git ولن يضيفه لقائمة التغييرات وهذا ما تبحث عنه

    ولكن كيف تقوم بذلك

    • إنشاء ملف يسمى .gitignore لاحظ النقطة والتسمية وسنقوم بإنشاء هذا الملف في ال root للمشروع
    • ثم تقوم بفتح الملف وتضع به اسم الملف أو المجلد فقط وبذلك تقوم بجعل هذا الملف untracked

    قم بهذه الخطوات وسيتم تنفيذ ما تريده

    يمكنك أيضًا القراءة عن هذا الموضوع عن طريق البحث عن gitignore 

     

  18. تختلف الشروط اللازمة لإستخراج بطاقة من دولة إلى أخرى فيجب عليك مراجعة الشروط الخاصة بالبنوك الموجودة في دولتك 

    ولكن أعتقد أنه لا يمكنك إصدار بطاقة بعمر 13 عام ولكن يمكنك استخدام بطاقة أي شخص من عائلتك أو شخص تثق فيه وليس هناك مشكلة في ذلك 

    قم بقراءة الإجابات على هذا السؤال أيضاً

  19. يمكنك استخدام ال  log-timestamp ببساطة من خلال إضافتها فقط 

    أولاً تقوم بتثبيتها من خلال npm

    npm install log-timestamp

    ثانياً تقوم بإستدعائها والطباعة لرؤية الفرق

    console.log('Before');
    
    require('log-timestamp'); //هذا السطر هو المطلوب فقط
    
    console.log('After');

    كما يمكنك استخدام الحل التالي إذا كنت لا تحتاج لإستخدام أو إضافات خارجية 

    var origlog = console.log;
    
    console.log = function( obj, ...placeholders ){
        if ( typeof obj === 'string' )
            placeholders.unshift( Date.now() + " " + obj );
        else
        {
            // This handles console.log( object )
            placeholders.unshift( obj );
            placeholders.unshift( Date.now() + " %j" );
        }
    
        origlog.apply( this, placeholders );
    };

     

  20. أولاً يعتبر الحصول على عمل من خلال منصات العمل الحر صعباً في البداية وهذا ليس له علاقة بمستواك  في المجال إنما لأانك جديد على المنصة فليس هناك أعمال لك على الموقع أو تقييمات ولكن مع الإستمرار في تقديم العروض ستجد بعض المشاريع

    ولكن هنا بعض الأشياء التي تضمن لك الحصول على عمل أو تسرع من فرص حصولك عليه مثل 

    • ال profile الخاص بما يحتوي من الأعمال السابقة
    • طريقة تقديم العرض على أي مشروع
    • طريقة تعريف نفسك  في ال profile

    يمكنك قراءة العديد من النصائح في إجابات هذه الأسئلة

     

  21. حتى نستطيع عكس الترتيب للتنازلي بواسطة argsort ربما نحتاج لعكس المصفوفة الناتجة من هذه الدالة ويمكننا عكسها كالتالي

    avgDists=np.array([1, 8, 6, 9, 4])
    ids = avgDists.argsort()[::-1][:3] #لعكس المصفوفة نستخدم [::-1]  
    ids
    array([3, 1, 2])

    أو يمكننا تحويل القيم لقيم بالسالب 

    import numpy as np
    avgDists = np.array([2, 9, 7, 10, 5, 3])
    ids = (-avgDists).argsort()[:n] #(-avgDists) لاحظ 
    print(ids)

     

    • أعجبني 1
  22. يمكنك استخدام الدالة  np.place حيث يمكنك التحقق من الشرط أولاً ثم استبدال العناصر التي تريدها

    لاحظ المثال التالي

    import numpy as np
    
    # إنشاء مصفوفة 2*3 بالقيم من 0...5
    arr = np.arange(6).reshape(2, 3)
    
    # استبدال الرقم 2 ب 3
    np.place(arr, arr == 2, 3)

    كما يمكنك استخدام ال fancy indexing كالتالي

    arr[arr > 255] = x

    سيتم استبدال العناصر الأكبر من 255 بالقيمة x

    تعتبر الطريقة الثانية هي الأسرع

    • أعجبني 1
  23. يمكنك استخدام الخاصية .size من numpy ولذلك لتنفيذ الكود السابق سيتم تعديله كالتالي

    import numpy as np
    a = np.array([[]])
    if a.aize == 0:
      print('empty')
    else:
      print('not empty')

    لاحظ أن المصفوفة فارغة عندما ترجع ال a.size رقم 0

    ولكن هناك مشكلة أن ال size تقوم بإرجاع واحد عند تنفيذها على np.array(None)

    import numpy as np
    np.array(None).size
    #1

     

    • أعجبني 1
  24. كما تم الشرح في التعليقات السابقة فالمشكلة أن العناصر بداخل overlayer تأخذ نفس ال opacity من الأب وهو overlayer لذلك الحل لهذه المشكلة ببساطة هو جعل العناصر بداخل ال overlayer بنفس المستوى 

    وهذه الطريقة هي المفضلة لعمل ال overlay لاحظ التعديل 

    <div class="homeSection">
      <div class="overlayer"></div>
      <div class="home-content"> <!--ووضعه بنفس المستوى overlayer  قمت بإخراج هذا العنصر من  -->
        <div>
          <h1 class="title">we are creative agency</h1>
          <p class="p"> <span class="nr">Nawwar</span> is an Egyptian IT-Training Center founded in 2012 We
            have identified the unique challenges people may face in learning a new technology and have
            exerted efforts in providing strategies to overcome them. We welcome your participation in our
            training
          </p>
          <button class="btn btn-start">Get started</button>
          <button class="btn btn-learn">Learn more</button>
        </div>
      </div>
    </div>

    وباستخدام هذه الطريقة لن تحتاج للتعديل في التنسيقات

    • أعجبني 1
×
×
  • أضف...