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

Ahmed Sharshar

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

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

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

إجابات الأسئلة

  1. إجابة Ahmed Sharshar سؤال في تحويل نوع العناصر في الأعمدة في pandas الي نوع أخر مختلف كانت الإجابة المقبولة   
    في pandas توجد الدالة  astype() والتي تقوم بالتحويل الى أي نوع من البيانات تريد، ويمكنها تحويل البيانات سواء كانت على الشكل dataframe أو series.
    الأكواد التالية توضح بعض الأمثلة لهذا:
    # التحويل الي int df = df.astype(int) # تحويل العمود a اليint والعمود b الي complex df = df.astype({"a": int, "b": complex}) # التحويل الي float64 s = s.astype(np.float16) # التحويل الي string s = s.astype(str) لكن يجب أن تحذر أثناء استخدامك لها لانها قد تؤدي في بعض الأحيان الى تحويل خاطئ:
    >>> s = pd.Series([1, 5, -11]) >>> s 0 1 1 5 2 -11 dtype: int64 لاحظ ماذا يحدث عند التحويل:
    >>> s.astype(np.uint8) 0 1 1 5 2 245 dtype: uint8 لأن القيمة -7 صغيرة، قام بعمل خطأ أثناء تحويلها الى uint8 وذلك لان القيم السالبة خارج نطاق uint8 ، لكنه لم يقم باظهار خطأ وانما قام بعمل حساب خاطئ، لذا يجب أن تعرف ما الذي تقوم بتحويله وهل هو مناسب أم لا.
  2. إجابة Ahmed Sharshar سؤال في اختيار عناصر محددة داخل dataframe باستخدام in في pandas كانت الإجابة المقبولة   
    في pandas ، توجد دالة مشابهة ل IN التي توجد في SQL تسمي  pd.Series.isin.
    من أجل اختيار أو اختبار وجود عناصر داخل dataframe عن طريق السطر الأتى:
    something.isin(somewhere) المثال التالي يوضح استخدام تلك الدالة في حل مشلكتك:
    import pandas as pd >>> df country 0 US 1 UK 2 Germany 3 China >>> countries_to_keep ['UK', 'China'] >>> df.country.isin(countries_to_keep) 0 False 1 True 2 False 3 True Name: country, dtype: bool لاحظ أننا قمنا بإختبار تواجد العناصر التي في countries_to_keep بداخل country، والعناصر الموجودة بداخلها تظهر امامها True وغير الموجودة ب False.
  3. إجابة Ahmed Sharshar سؤال في إقتطاع بعض العناصر على شكل dataframe في مكتبة pandas كانت الإجابة المقبولة   
    في pandas توجد الدالة series.truncate  والتى تمكننا من إقتطاع أجزاء محددة من البيانات على شكل dataframe وهي كالتالي:
    Series.truncate(before=None, after=None, axis=None, copy=True) حيث نقوم بتحديد بداية ونهاية الأماكن التي نريد إقتطاعها ، ويمكن استخدامها لتحقيق هدفك كالتالي:
    import pandas as pd sr = pd.Series([19.5, 16.8, 22.78, 20.124, 18.1002]) # نقتطع البيانات ما قبل 1 وما بعد 3 sr.truncate(before = 1, after = 3) ويكون شكل البيانات الخارجة كالتالي:

  4. إجابة Ahmed Sharshar سؤال في ترتيب العناصر تصاعديًا أو تنازليًا في شكل dataframe في بايثون كانت الإجابة المقبولة   
    بما ان البيانات على شكل dataframe، فانه من المستحب التعامل معها استخدام pandas ، وذلك للتسهيل.
    من أجل ترتيب الاسماء بشكل تصاعدي يمكن استخدام الكود التالي:
    # استدعاء المكتبة import pandas as pd # قراءة ملف البيانات data = pd.read_csv("data.csv") # ترتيب البيانات بالاسم data.sort_values("Name", axis = 0, ascending = True, inplace = True, na_position ='last') # عرض الترتيب الجديد data لاحظ انه يجب تغيير اسم ملف البيانات تبعا لاسمه الحقيقي.
    كذلك اذا أردت ترتيبه بشكل تنازلي كل ما عليك هو تغيير ascending من true الي false.
    لاحظ كذلك ان "Name" هو اسم العمود الذي تريد ترتيبه ويمكنك اختيار اي عمود كما تريد.
  5. إجابة Ahmed Sharshar سؤال في هل يجب أن أستخدم scipy.pi أو numpy.pi أو math.pi؟ كانت الإجابة المقبولة   
    في الواقع لا يوجد فرق بين قيم pi في اي من المكتبات الثلاث، للتاكد جرب الكود التالي:
    >>> import math >>> import numpy as np >>> import scipy >>> math.pi == np.pi == scipy.pi True هنا نحن نقارن بين قيم pi في الثلاث مكتبات والناتج هو true اي انهم جميعهم متساوون.
    السبب الوحيد لتوفير نفس قيمه pi في الثلاث مكتبات هي تسهيل استدعائها بغض النظر عن المكتبة التي تقوم باستدعاءها والعمل بها، نظرا لاهمية قيمه ال pi وكثرة استخدامها.
  6. إجابة Ahmed Sharshar سؤال في دالة التنشيط selu واستخدامها في كيراس Keras كانت الإجابة المقبولة   
    SELU هي دالة تنشيط لها الصيغة الرياضية:
    f(x) = { λ.x if x > 0 λ.α(exp(x)-1) if x < 0} حيث ان λ و α ثوابت عددية وتساوي تقريبا 
    a ≈ 1.6732632423543772848170429916717 λ ≈ 1.0507009873554804934193349852946 وترسم بيانيا بالشكل التالي:

    تستطيع ان تلاحظ من الرسم تصرف الدالة، وهي تأخذ شكلا اسيا في القيم الاقل من الصفر بينما تتحول لتصبح خطية في القيم الاكبر من الصفر، وهي تشبه الددالة elu ، فقط باضافة بعض الثوابت.
    تلك الدالة ببساطه تقوم بعمل normalization، اي انها تقوم بطرح المتوسط من كل قيمة بعد ذلك تقسم على الانحراف المعياري، وبهذا فان المتوسط يصبح 0 والانحراف المعياري يصبح 1 للاوزان  بعد عمل ال normalization وهذا يساعد في عملية التعلم ويجعلها اسهل.
    بالنسبة لمشتقتها فهي كالتالي:
    f(x) = { λ if x > 0 λ.α(exp(x)) if x < 0} ويمكن تمثيلها بيانيا بالشكل التالي:

    مميزاتها:
    بعد تطبيق ال normalization فان هذا يجعل عملية التعلم اسرع بكثير مقارنه بعدم استخدامها. لا يمكن ان يحدث اي مشكلة اثناء عملية التعلم. العيوب:
    تعتبر جديدة نسبيا لذا ليس لها دعم كبير في الاكواد حتى الان اما عن استخدامها في Keras فيمكنك استخدامها تماما كاي دالة تنشيط اخرى كالتالي:
    num_classes = 10 model = tf.keras.Sequential() model.add(tf.keras.layers.Dense(64, kernel_initializer='lecun_normal', activation='selu')) model.add(tf.keras.layers.Dense(32, kernel_initializer='lecun_normal', activation='selu')) model.add(tf.keras.layers.Dense(16, kernel_initializer='lecun_normal', activation='selu')) model.add(tf.keras.layers.Dense(num_classes, activation='softmax'))  
  7. إجابة Ahmed Sharshar سؤال في ظهور الخطأ ValueError: Error when checkingModelTarget: expected dense_3 to haveFast (None, 1) but got array with shape (10000, 10)  في كيراس Keras كانت الإجابة المقبولة   
    المشكلة تكمن في شكل ترميز البيانات وعدم استخدامك لدالة loss مناسبة لحسابها، وهذا الاختلاف ما بين sparse_categorical_crossentropy  و categorical_crossentropy حيث ان categorical_crossentropy تتوقع ان الترميز بين 0 و 1، وهو الشكل الذي قمت بالترميز اليه سابقا.
    لذلك كل ما عليك هو تعديل 
    loss='sparse_categorical_crossentropy' لتصبح:
    loss='categorical_crossentropy' ويكون الكود السليم كالتالي:
    K.set_image_dim_ordering('th') numpy.random.seed(7) from keras.datasets import mnist # تحميل البيانات (X_train, y_train), (X_test, y_test) = mnist.load_data() # تحضير البيانات X_train = X_train.reshape(X_train.shape[0], 1, 28, 28) X_test = X_test.reshape(X_test.shape[0], 1, 28, 28) X_train=X_train.astype('float32')/ 255.0 X_test=X_test.astype('float32')/ 255.0 #label ترميز ال y_train = np_utils.to_categorical(y_train) y_test = np_utils.to_categorical(y_test) model = Sequential() model.add(Convolution2D(32, 3, 3, input_shape=(1, 28, 28), activation='tanh')) model.add(MaxPooling2D(pool_size=(2, 2))) model.add(Convolution2D(16, 3, 3, activation='tanh')) model.add(MaxPooling2D(pool_size=(2, 2))) model.add(Dropout(0.4)) model.add(Flatten()) model.add(Dense(100, activation='tanh')) model.add(Dense(y_test.shape[1], activation='softmax')) # تجميع المعلومات model.compile(loss='categorical_crossentropy', optimizer='rmsprop', metrics=['acc']) # بناء النموذج model = larger_model() # تدريبه model.fit(X_train, y_train, epochs=12, batch_size=128,validation_data=(X_test, y_test)) # تقييم النموذج scores = model.evaluate(X_test, y_test) print("Baseline Error: %.2f%%" % (100-scores[1]*100)) # حفظه model_json = model.to_json() with open('mnist_model.json', 'w') as f: f.write(model_json) model.save_weights("mnist_weights.h5") # تحميله with open('mnist_model.json') as f: model_json = f.read() model = model_from_json(model_json) model.load_weights('mnist_weights.h5') # تجميع المعلومات model.compile(loss='categorical_crossentropy', optimizer='rmsprop', metrics=['acc']) scores = model.evaluate(X_test, y_test) print("Baseline Error: %.2f%%" % (100-scores[1]*100))  
  8. إجابة Ahmed Sharshar سؤال في تحويل tensor الي numpy كانت الإجابة المقبولة   
    هناك طريقة سهلة وهي فقط باستخدام  .numpy() لتحويل tensor الي numpy array كالتالي:
    import tensorflow as tf a = tf.constant([[1, 2], [3, 4]]) b = tf.add(a, 1) a.numpy() # array([[1, 2], # [3, 4]], dtype=int32) b.numpy() # array([[2, 3], # [4, 5]], dtype=int32) tf.multiply(a, b).numpy() # array([[ 2, 6], # [12, 20]], dtype=int32) اذا لم تعمل هذة الطريقة يمكنك حينها استخدام الدالة التالية:
    tf.compat.v1.Session المثال التالي يوضح الطريقة:
    a = tf.constant([[1, 2], [3, 4]]) b = tf.add(a, 1) out = tf.multiply(a, b) out.eval(session=tf.compat.v1.Session()) # array([[ 2, 6], # [12, 20]], dtype=int32)
  9. إجابة Ahmed Sharshar سؤال في ظهور الخطأ 'RuntimeError: You must compile your model before training/testing. Use `model.compile(optimizer, loss) في كيراس Keras كانت الإجابة المقبولة   
    من أجل تشغيل الموديل الخاص بك، يجب ان تقوم بعمل compile وهي الدالة التي تقوم بتجميع وتشغيل كل ما تم بناءه في الخطوات السابقة كلها.
    وتكون الدالة compile على الشكل التالي:
    Model.compile( optimizer="rmsprop", loss=None, metrics=None, loss_weights=None, weighted_metrics=None, run_eagerly=None, steps_per_execution=None, **kwargs ) بشكل عام نهتم بأول 3 متغيرات فقط لتعديلها:
    optimizer: وهو المحسن الذي نريد استخدامه loss: وهي دالة الفقد التي نريد استخدامها metrics: وهي المعيار الذي نريد حساب الكفاءه منه كل ما نريد تعديله في الكود الخاص بك هو تعديل فقط اخر جزء بزيادة الدالة compile لها لتكون كالتالي:
    model = models.Sequential() model.add(layers.Dense(64, activation='relu', input_shape=(10000,))) model.add(layers.Dense(64, activation='relu')) model.add(layers.Dense(46, activation='softmax')) model.compile(optimizer='rmsprop', loss='categorical_crossentropy', metrics=['acc']) history = model.fit(partial_x_train, partial_y_train, epochs=6, batch_size=512, validation_data=(x_val, y_val))  
  10. إجابة Ahmed Sharshar سؤال في استخدام keras في تقسيم الصور الي train و test كانت الإجابة المقبولة   
    يستطيع keras الان التقسيم بين الصور الخاصة ب tarining وكذلك testing حتى اذا كانوا في نفس المسار كالتالي:
    لاحظ ان train_data_dir هو المسار الذي توجد به الصور الخاصة بك
    train_datagen = ImageDataGenerator(rescale=1./255, shear_range=0.2, zoom_range=0.2, horizontal_flip=True, validation_split=0.2) # تقسم نسبة ال validation train_generator = train_datagen.flow_from_directory( train_data_dir, target_size=(img_height, img_width), batch_size=batch_size, class_mode='binary', subset='training') # نضع بعض الصور في ال training validation_generator = train_datagen.flow_from_directory( train_data_dir, # نفس المسار الذي توجد به الصور الخاصة ب training target_size=(img_height, img_width), batch_size=batch_size, class_mode='binary', subset='validation') # نضع تلك الصور ك validation model.fit_generator( train_generator, steps_per_epoch = train_generator.samples // batch_size, validation_data = validation_generator, validation_steps = validation_generator.samples // batch_size, epochs = nb_epochs)
  11. إجابة Ahmed Sharshar سؤال في تشغيل GPU على keras كانت الإجابة المقبولة   
    نعم يمكنك استخدام keras على ال GPU حيث انها تدعم كلا من CPU و GPU، لكن هناك بعض اشياء يجب التحقق منها اولا:
    يجب أن يحتوى جهازك على كارت شاشة GPU ( يجب ان يكون من نوع nvidia وليس amd حيث انه يدعم nvidia فقط)
    يجب أن تقوم بتحميل ال driver الخاص بكارت الشاشة الخاص بك من tensorflow
    يجب ان تقوم بتحميل cuda ، يمكنك تحميله من هنا
    يجب أن تتاكد ان tensorflow يعمل على ال gpu الخاص بك عنك طريق تشغيل الكود الاتي:
    sess = tf.Session(config=tf.ConfigProto(log_device_placement=True)) هذا سيجعل  tensorflow يبدأ العمل على الجهاز.
    يمكنك كذلك تشغيل الكود التالي لتفعيله والتأكد:
    from tensorflow.python.client import device_lib print(device_lib.list_local_devices()) والخرج يجب أن يكون كالتالي:
    [ name: "/cpu:0"device_type: "CPU", name: "/gpu:0"device_type: "GPU" ] اذا ظهر كذلك فان كل شئ يعمل بشكل جيد.
    يمكنك بعد ذلك تفعيل keras بالكود التالي:
    from keras import backend as K K.tensorflow_backend._get_available_gpus() الان يمكنك استعمال keras للتدريب على ال gpu بدل ال cpu.
  12. إجابة Ahmed Sharshar سؤال في هل الدورة مسجلة أم ستكون أنلاين كانت الإجابة المقبولة   
    دورات حسوب تكون مسجلة ولذلك لتمكنك من الوصول للفيديوهات في اي وقت تريد دون تقييد.
    لكن ذلك لا يعني عدم التواصل، فرغم انها مسجلة، الا ان هناك مجتمع من المتعلمين حاضرين دائما من أجل المساعدة سواء كان لديك سؤال او اردت مشاركة شئ او المساعدة في جواب شئ ما وهناك ايضا متابعة مستمرة من فريق عمل الدورة.
    يمكنك الوصول الي المعلومات عن الدورات بالضغط عليها من هنا
     
     
  13. إجابة Ahmed Sharshar سؤال في خوارزميات هياكل البيانات كانت الإجابة المقبولة   
    بالتأكيد تحتاج الى تعلم هياكل البيانات أو data structure، والاصح في الترتيب هو أن تتعلم data structure اولا ثم تتعلم الخارزميات لانها ستسهلها عليك.
    كذلك فان تصميم الخوارزميات يتطلب معرفة مسبقة ب data structure وذلك لانك بالتاكيد تحتاجها في التصميم، كمثال اذا اردت تصميم خوارزمية تعتمد على المصفوفات فيجب أن تعرف ماهية المصفوصة وكيف تخزن فيها البيانات وذلك لتتحكم في امكانياتها، وهكذا في كل أنواع البيانات.
    عندما تكمل تعلمها بدقة سترى الفرق في كيف أن تصميم الخوارزميات أصبح اسهل و أوضح.
  14. إجابة Ahmed Sharshar سؤال في ما هي الاختلافات بين arrays و matrices في Numpy؟ أي واحدة علي أن أستخدم؟ كانت الإجابة المقبولة   
    تعرف ال matrix والتي جمعها matrices على انها المصفوفة ثنائية الأبعاد، والتي التي تحتوي على صفوف وأعمدة فقط، أنظر المثال التالي:
    >>> import numpy as np >>> a = np.array([[2,3], [4,5]]) >>> >>> y = np.asmatrix(a) >>> >>> a[0,0] = 5 >>> >>> y matrix([[5, 3], [4, 5]]) أما عن np.array فهي شكل اكثر شمولا عن np.mat، حيث أنها لا تقف فقط عند المصفوفات ثنائية الأبعاد وانما تدعم كل ألابعاد N-dimensional.
    np.array([[1, 2], [3, 4]]) array([[1, 2], [3, 4]]) كما انها أسهل في التعامل وتوفر أمكانيات اكثر للتعامل مع المصفوفات، في الكود التالي بعض العمليات التي توفرها numpy.array
    import numpy # Two matrices are initialized by value x = numpy.array([[1, 2], [4, 5]]) y = numpy.array([[7, 8], [9, 10]]) # جمع مصفوفتين print ("Addition of two matrices: ") print (numpy.add(x,y)) # subtract()طرح مصفوفتين print ("Subtraction of two matrices : ") print (numpy.subtract(x,y)) # divide()قسمة مصفوفتين print ("Matrix Division : ") print (numpy.divide(x,y)) print ("Multiplication of two matrices: ") print (numpy.multiply(x,y)) print ("The product of two matrices : ") print (numpy.dot(x,y)) print ("square root is : ") print (numpy.sqrt(x)) print ("The summation of elements : ") print (numpy.sum(y)) print ("The column wise summation : ") print (numpy.sum(y,axis=0)) print ("The row wise summation: ") print (numpy.sum(y,axis=1)) # using "T" عكس المصفوفة print ("Matrix transposition : ") print (x.T) ويكون الخرج كالتالي:
    Addition of two matrices: [[ 8 10] [13 15]] Subtraction of two matrices : [[-6 -6] [-5 -5]] Matrix Division : [[0.14285714 0.25 ] [0.44444444 0.5 ]] Multiplication of two matrices: [[ 7 16] [36 50]] The product of two matrices : [[25 28] [73 82]] square root is : [[1. 1.41421356] [2. 2.23606798]] The summation of elements : 34 The column wise summation : [16 18] The row wise summation: [15 19] Matrix transposition : [[1 4] [2 5]]  
  15. إجابة Ahmed Sharshar سؤال في كيف تطبع مصفوفة صغيرة بدون علامة comma بين العناصر؟ كانت الإجابة المقبولة   
    بالنسبة لسؤالك فإنه ينقسم الي جزئين أساسين:
    اذا أردت طباعة المصفوفة بدون فواصل، فهناك حلان:
    الاول أن تقوم فقط باستخدام أمر print دون أي شئ أخر، وذلك لانه هناك اختلاف بين شكل المصفوفة المخزنه في الذاكرة والتي تظهر عند استدعائها باستخدام كتابة اسمها كما في المثال التالي: a = np.random.random(10) >>> a array([0.71244268, 0.65202232, 0.45514279, 0.12868502, 0.86755307, 0.54365432, 0.76884071, 0.37287693, 0.10350725, 0.66008725]) وذلك لانه يقوم بطباعتها بالشكل المخزن في الذاكرة،أما اذا اردت طباعتها من دون فواصل، فقط أستخدم print كالتالي:
    a = np.random.random(10) >>> print(a) array([0.71244268 0.65202232 0.45514279 0.12868502 0.86755307 0.54365432 0.76884071 0.37287693 0.10350725 0.66008725]) الطريقة الثانية هي استخدام الامر print مع اعطاءه بعض الخصائص الاضافية كالتالي: print(*data, sep='') حيث أن sep يوضع بعدها الشكل الذي تريد أن تقوم بفصل العناصر به، فهنا وضعنا علامات تنصيص بينها فارغ أي أنه الفواصل بين عناصر المصفوفة هي الفراغ space.
    بالنسبة للتحكم بدقة الاخراج أو الدقة، فيمكنك تحديد عدد الارقام العشرية التي تريد ظهورها عن طريق:
    np.set_printoptions(precision=2) حيث أن الرقم بعد precision  يوضح عددالاربام العشرية التي تريد ظهورها في النواتج.
  16. إجابة Ahmed Sharshar سؤال في [php]كيفية تكرار نفس المتغيرات دون اعادة كتابتها في كل مرة كانت الإجابة المقبولة   
    دعنا نفهم ما هي case لنعرف كيف تعمل أولا:
    case تشبة if في بعض اللغات، وما بداخلها هو الكود الذي يتم تنفيذة اذا حدث الشرط الذي يوضع بجوار case.
    لذلك فانها تعتبر حلقة مغلقة ، واذا اردت تعريف متغير أكثر من مرة بداخله، عليك أن تكرره أكثر من مرة.
     لذلك أبسط حل هو أن تقوم بتعريف الأربع متغيرات الذي تريد استخدامهم في ال global ، خارج أي case منهم، فتقوم بوضع الكود التالي قبل اول case:
    $colorSelect = $_POST['colorSelect']; $colorNumber = $_POST['colorNumber']; $countPiece = $_POST['countPiece']; $total = $_POST['total']; وبما انه تم تعريفهم في ال global فلا داعي لاعادة تعرفيهم داخل أي case منهم، كمثال:
    $colorSelect = $_POST['colorSelect']; $colorNumber = $_POST['colorNumber']; $countPiece = $_POST['countPiece']; $total = $_POST['total']; case 'add_buttons': // var_dump($_POST);exit; $order = $_POST['order']; $buttons = $_POST['buttons']; // $result = $conn->query("DELETE FROM order_buttons WHERE order_id='$order'"); for ($i =0; $i < count($buttons); $i++){ try { $result = $conn->query("INSERT INTO order_buttons(order_id, button_id, color_select, colorNumber_input, countPiece , total ) VALUES('$order','$buttons[$i]','$colorSelect[$i]' ,'$colorNumber[$i]','$countPiece[$i]','$total[$i]')"); } catch (Exception $e) { var_dump($e->getTrace()); // or to get the full error info, just var_dump($e); }  هذا يسهل ويقلل من حجم الكود ويجعله أسرع ُأثناء تشغيله.
  17. إجابة Ahmed Sharshar سؤال في الأعداد المثالية بلغة C كانت الإجابة المقبولة   
    حل السؤال بسيط، الارقام المثالية هي الارقام التي فيها مجموع مكوناتها يساوى الرقم ذاته. أي أن الرقم 6 عناصرة 2 ،3،1 ، لان 2*3 = 6 و 1*6 =6 واذا جمعنا 1+2+3 =6 لذلك هو رقم مثالي.
    سنكتب برنامج يقوم بالمرور عبر كل رقم من 1 ل 1000 عن طريق حركة تكرارية، ويقوم باستخراج عناصره، ثم يجمعهم، اذا كان جمعهم يساوى الرقم نفسه يطبعه ثم يكمل لباقي الارقام.
    فيما يلي الكود الذي يقوم بالتالي:
    #include <stdio.h> int main(){ int sum; for(int number = 1;number <= 1000; number++){ sum = 0; for (int i = 1; i <= number/2; i++){ if (number % i == 0){ sum += i; } } if (sum == number){ printf("%d is perfect\n", number); } } return 0; } ناتج الكود سيكون التالي:
    6 is perfect 28 is perfect 496 is perfect  
  18. إجابة Ahmed Sharshar سؤال في ما فائدة استخدام TypeScript؟ كانت الإجابة المقبولة   
    مزايا استخدام TypeScript عن JavaScript:
    يشير TypeScript دائمًا إلى أخطاء الترجمة في وقت كتابة الكود. بسبب هذا في وقت التشغيل ، فإن فرصة حدوث أخطاء أقل بكثير بينما JavaScript هي تظهر الاخطاء فقط بعمل تشغيل الكود. يحتوي TypeScript على ميزة مكتوبة بقوة أو تدعم الكتابة الثابتة. هذا يعني أن الكتابة الثابتة تسمح بالتحقق من صحة النوع في وقت الترجمة. هذا غير متوفر فيJavaScript. يدعم TypeScript مكتبات JS ووثائق API لا يعد TypeScript سوى JavaScript مع اضافة بعض الميزات الإضافية مثل ميزات ES6. قد لا يكون مدعومًا في المستعرض الخاص بك ولكن يمكن لمجمع TypeScript تجميع ملفات .ts في ES3 و ES4 و ES5 أيضًا. يسمح بدعم أفضل لأداة وقت التطوير. عيوب استخدام TypeScript على JavaScript
    بشكل عام ، يستغرق TypeScript وقتًا لتشغيل الكود كما انه يتطلب كتابة عدد أكبر من الاكواد.
  19. إجابة Ahmed Sharshar سؤال في تقسيم مصفوفة إلى مصفوفتين في Numpy كانت الإجابة المقبولة   
    يوجد اكثر من طريقة لتقسيم مصفوفة في numpy:
    1) اذا كانت المصفوفة احادية الابعاد 1-D:
    لو عندنا مصفوفة احادية كالتالي:
    array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]) يمكن تقسيمها الي 5 مصفوفات متساوية باستخدام الكود:
    import numpy as np np.split(x, 5) ويكون الناتج:
    [array([0, 1]), array([2, 3]), array([4, 5]), array([6, 7]), array([8, 9])] 2) تقسيم مصفوفة في ثناية الابعاد 2-D:
    في السؤال المطروح، اذا كان لدينا المصفوفة :
    [[1,2,3,4], [5,6,7,8]] يمكن تقسيمه عن طريق الكود التالي:
    X = np.array([[1,2,3,4], [5,6,7,8]]) X_new = np.split(a,2,axis=1) يمكن كذلك تقسيمها لعدد من المصفوفات غير متساوية الحجم اذا اردنا عن طريق استخدام ال indices:
    np.split(X, [2,3,3]) هذا سوف يقسمهم الي 3 مصفوفات، اولهما تحتوي على عنصرين والثانيه والثالثة تحتوي كل منهما على ثلاث عناصر كالتالي:
    [array([1, 2]), array([3, 4, 5]), array([6, 7, 8])] هذا يوفر امكانية التقسيم حتى لقطع غير متساوية وبشكل عام يمكن استخدام np.split كالتالي:
    numpy.split(arary, indices, axis=0) >>>array: ادخال المصفوفة المارد تقسيمها >>>indices: عدد المصفوفات المراد القسيم اليها، يمكن ايضا ادخال عدد من الارقام (كما في المثال السابق) لتقسيمها لقطع غير متساوية >>>axis: المحور الذي يراد التقيم عليه، افتراضيا 0 وهو يمثل الصفوف او 1 وهو يمثل الاعمدة  
×
×
  • أضف...