لوحة المتصدرين
المحتوى الأكثر حصولًا على سمعة جيدة
المحتوى الأعلى تقييمًا في 08/07/21 في كل الموقع
-
يمكنك القيام بذلك عن طريق استخدام ال attribute horizontal بالقيمة true و بعدها ضبط التنسيقات حتى تظهر بالشكل الذي تريده. لاحظ المثال التالي: import React from 'react'; import { StyleSheet, Text, SafeAreaView, ScrollView, StatusBar, View } from 'react-native'; const App = () => { return ( <SafeAreaView style={styles.container}> <ScrollView horizontal={true} style={styles.scrollView}> <View> {"L o r e m L o r e m L o r e m".split(" ").map(letter => ( <Text style={styles.text}>{letter}</Text>) )} </View> <View> {"I p s u m I p s u m I p s u m".split(" ").map(letter => ( <Text style={styles.text}>{letter}</Text>) )} </View> </ScrollView> </SafeAreaView> ); } const styles = StyleSheet.create({ container: { flex: 1, paddingTop: StatusBar.currentHeight, }, scrollView: { backgroundColor: 'pink', marginHorizontal: 20, }, text: { display: "flex", flexDirection: "column", fontSize: 40, marginRight: "50px", marginLeft: "40px" }, }); export default App; الناتج: و لكن أنصحك باستخدام ال FlatList بدلًا من ال scrollView و هذا لأن ال FlatList لا تقوم بتحميل/عرض"render" جميع البيانات"العناصر الأبناء" في نفس الوقت و إنما تقوم بتحميلها بشكل lazy عند الحاجة لها فقط مما يجعلها أفضل من جهة الأداء على عكس ال ScrollView: const renderItem = ({ item }) => { return ( <Card key={item.id} id={item.id} name={item.name} /> ); }; <FlatList data={data} numColumns={2} renderItem={renderItem} />2 نقاط
-
الإصدار 1.0.0
11238 تنزيل
التصميم هو مهنة العصر الحالية، هذا العصر الذي يولي أهميةً كبيرةً منقطعة النظير للعامل البصري، فيدخل مجال التصميم في كل مناحي حياتنا اليومية فكل شيء تراه حولك بدءًا من صور أغلفة المنتجات وحتى الإعلانات والملصقات والشعارات وأغلفة الكتب وكل شيء تقريبًا قد مرَّ على يدي مصمم وعولج داخل أحد تطبيقات الرسم والتصميم فسوق التصميم كبيرٌ يزداد فيه الطلب على المصممين يومًا بعد يوم. تمثلت رؤيتنا للكتاب في أن يكون المرجع الأول للمصمم العربي أو من يريد تعلم مجال التصميم الجرافيكي وذلك بجعله شاملًا لكل ما يحتاج إليه المتعلم في بداية رحلته التعليمية في هذا المجال وليتضمن العناصر الأساسية في هذا التخصص سواء كان ذلك في الأساسيات أو البرامج والتطبيقات أو أفكار التصميمات. يهدف الكتاب لإخراج أفراد متمكنين من أساسيات مجال التصميم الجرافيكي ولديهم المعلومات والخبرة الأساسية اللازمة لدخول سوق العمل وتحقيق دخل مادي عبر سوق الإنترنت الكبير وذلك من خلال تنفيذ أعمال التصميم الجرافيكي عبر منصات العمل الحر العربية مثل مستقل وخمسات. يتكون الكتاب من خمسة أقسام رئيسية: الأساسيات والمبادئ البرامج والتطبيقات مجالات التصميم الجرافيكي قواعد التصميم المسار المهني والتطوير الذاتي دخول سوق العمل هذه النقاط الخمس نعدها شاملة لما يحتاج إليه المصمم الجديد ليكون قادرًا على إنتاج تصميم وبيعه في السوق. يستهدف الكتاب جمهور المصممين المبتدئين أو من يريدون دخول هذا المجال، وعليه فإن الكتاب ليس موجهًا للمصممين المتقدمين أو المحترفين فهؤلاء في الغالب يتعلمون مباشرة من مصادر متقدمة سواءً عربية أو أجنبية ولكن قد يكون لدى البعض منهم نقص في معرفة أساسيات التصميم الفنية والأكاديمية، لذا يمكنهم آنذاك الرجوع إلى فصول بعينها من هذا الكتاب أي أنَّ فصول هذا الكتاب قد تفيد حتى من كان متقدمًا في مجال التصميم التطبيقي ولكن دون أساس أكاديمي سليم. هذا الكتاب مرخص بموجب رخصة المشاع الإبداعي Creative Commons «نسب المُصنَّف - غير تجاري - الترخيص بالمثل 4.0». يمكنك قراءة فصول الكتاب على شكل مقالات من هذه الصفحة، «أساسيات تصميم الرسوميات»، أو تجدها مسردة بالترتيب التالي: مقدمة إلى تصميم الرسوميات (التصميم الجرافيكي) عناصر تصميم الرسوميات مبادئ تصميم الرسوميات الألوان في تصميم الرسوميات ونظرية الألوان تعرف على أشهر برامج وتطبيقات تصميم الصور والرسوميات مقدمة إلى برنامج أدوبي فوتوشوب Adobe Photoshop مقدمة إلى برنامج أدوبي إليستريتور Adobe Illustrator والتعرف على واجهته مساحات وقياسات العمل التصميمي النص وأسلوب الطباعة Typography في تصميم الرسوميات قواعد التعامل مع الصور والرسوميات قواعد تصميم الأيقونات والشعارات قواعد تصميم المطبوعات والإعلانات قواعد تصميم الواجهات قواعد تصميم الرسوم البيانية قواعد تصميم الهوية البصرية دليل المسار المهني لمصمم الرسوميات مواقع العمل الحر والعمل عن بعد لتصميم الرسوميات1 نقطة -
هذا سؤال سهل ولكن قل أن لدي مصفوفة X*Y. كل ما أريد فعله هو استخراج أعمدة معينة وتخزينها في مصفوفة أخرى ولكني أحصل على أخطاء في المكود لدي. هذا هو الكود: >>> import numpy as np >>> x = np.array([ ... [0,1,2,3,4,5,6,7,8,9], ... [10,11,12,13,14,15,16,17,18,19], ... [20,21,22,23,24,25,26,27,28,29] ... ]) >>> extractedData = x[[:,1],[:,9]] File "<stdin>", line 1 x[[:,1],[:,9]] ^ SyntaxError: invalid syntax >>> من المفترض أن السطر أعلاه يجب أن يكون كافياً ولكن يبدو أن ذلك غير كافي. حاولت أن أعرف أين المشكلة ولكنني لم أستطع إيجاد المشكلة. ما أحاول فعله هو إستخراج الأعمدة من 1 إلى 3، لكن لا أعرف أين المشكلة.1 نقطة
-
ما الحل عندما يتأخر صاحب المشروع عن استلام مشروعه على منصة مستقل؟ بحيث يبقى المشروع معلقاً لدى المستقل في بند (مشاريع يعمل عليها) وبالتالي يمنعه ذلك من استلام مشروع جديد يحل مكان المشروع المعلق.1 نقطة
-
يحق لصاحب المشروع التأخر في استلام المشروع حتى يقوم بالتأكد من أن المستقل قد أنجز المطلوب، وأرسل له كل الملفات المطلوبة و أنها تعمل بصورة جيدة. بشكل عام، عليك الإنتظار قليلاً و إذا لم يفتح صاحب المشروع حسابه يُمكنك حينها التواصل مع فريق الدعم للمنصة من خلال هذا الرابط: مركز مساعدة حسوب و فتح تذكرة لمُشكلتك مع توضيحها جيداً و سيقوم الفريق حينها بحل مُشكلتك أو تنبيه صاحب المشروع للتواصل معك أو إنهاء المشروع. إن قمت بكل شيئ بشكل جيد، لاداعِ للقلق يمكن لفريق الدعم استلام المشروع عن صاحب المشروع إن حدث أي مشاكل من طرفه.1 نقطة
-
هل يمكنك إرفاق شيفرات النماذج models الخاصة بكلا الجدولين؟ بشكل عام، علينا عمل join بين الجدولين (على المفتاح الأجنبيي student_id) لتكون عبارة SQL هكذا: select exams_enter_attemps from exams_enter_attemps e join student s on student_id when s.level=1 وستكون العلاقة تقريبا هكذا: DB::table("exams_enter_attemps e") ->join("student s", function($join){ $join->on("student_id", "when", "s.level"); }) ->select("exams_enter_attemps") ->get(); الشكل العام للعلاقة الخاصة بالربط JOIN: use Illuminate\Support\Facades\DB; $users = DB::table('users') ->join('contacts', 'users.id', '=', 'contacts.user_id') ->join('orders', 'users.id', '=', 'orders.user_id') ->select('users.*', 'contacts.phone', 'orders.price') ->get(); يمكنك تصفح التوثيق من هنا: laravel 8 queries#joins1 نقطة
-
السلام عليكم, عندما اقوم بعمل git status تظهر لى كل التغييرات التى قمت بها سواء قمت بتعديل او اضافة او حذف, كما ف الصورة لكن هل هناك من طريقة لازالة هذا التتبع مثلا انا حذفت الملف من جهازى ولكنى لا ارد ان اقوم بحذفه من الريبو repo على github .. بطريقة اخرى كيف اقوم بازالة هذه السطور الحمراء بدون ان اقوم بعمل commit لها ؟ هل هناك طريقة لحذف التغيير بدون عمل commit له ام اننى مجبر على رؤية كل هذه السطور عند كتابة git status ؟ ببساطة اريد حذف هذه السطور الحمراء دون حذف الملفات من ال repo على جيت هاب وذلك لاننى اريد حذفها من على جهازى فقط1 نقطة
-
مرحبا عبد الله، انا إسماعيل متخرج من الأكادمية من دورة تطوير تطبيقات الويب بلغة php، الدورة مشروحة بلغة عربية فصحى و مفهومة كما يمكنك تسريع سرعة الصوت او تخفيضه إن لم تستوعب جزء ما. تبدأ الدورة بشرح الأساسيات في لغة php و إطار العمل لارافيل، ثم يوجد عدة مسارات في كل مسار يتم بناء مشروع و ما أعجبني أنه في كل مسار يتم الشرح مِن قبل أستاذ آخر فإذا لم تفهم أو لم تستوعب طريقة الشرح في مسار ما ستفهم في آخر. بالإضافة الى انه يوجد مدربين ذو خبرة و يمكنك سؤالهم عن أي شيئ سواء اسفل الدرس او القسم الخاص بالأسئلة. بالنسبة لسؤالك الثاني قد تختلف المدة من شخص لآخر و حسب قدرة كل شخص في الفهم، لكن ما أنصحك به أن لا تركز على الوقت بل ركز على فهم الأساسيات جيدا و البحث عن الحلول للمشاكل التي تواجهك بنفسك قبل سؤال المدربين مباشرة. ارجو لك التوفيق.1 نقطة
-
السلام عليكم ورحمة الله وبركاته اخواني الكرام في الحقيقة انا محتار، هل اشتري دورات اكاديمية حسوب ام لا، بعض الناس يقولون انها دورات عادية والبعض الاخر يقولون ان الشخص عندما ينتهي منها ستمكنه من العمل على مواقع العمل الحر مثل مستقل واب وورك، وانا بصراحة احترت فهل منكم من جرب هذه الدورة وحصل على عمل بعدها ارجو الرد فأنا متحير اشد التحير1 نقطة
-
ابشرك يا صديقي انني اليوم حصلت على شهادة تخص مجال تطوير واجهات المستخدم من طرف الاكاديمية وكراي شخصي قمت بالدراسة معهم ضمن هادا المسار ويمكن القول انها تجربة ناجحة وايضا لا زلت ادرس معهم بالنسبة لمبتدئ فمحتوى الاكاديمية جد مناسب ( راي شخصي)1 نقطة
-
هل يمكنني ان اجد وضيفه او عمل حر بمكسب جيد في دوره علوم الحاسوب او بعدها او انها فقد للتعلم1 نقطة
-
اذا كان لدي جدول واردت اضافة حقلين وتحديد مكانهم فماذا اكتب لكي احدد مكانهم في الجدول1 نقطة
-
السلام عليكم ورحمة الله وبركاتة انا أستخدمت الكود التالي لجلب الصفحة : public function employeeselect(){ $user = Auth::user()->no_ministry; $selectemployees = Employee::select('id' , 'id_no' , 'name' , 'no_ministry' , 'staff' , 'phone') -> get(); $selectstaffs = Staff::all(); return view('school.employee', compact('selectemployees' , 'selectstaffs')); } أنا اضفت في جدول User.php حقل إضافي اسمه no_ministry ( الرقم الوزاري للمدرسة ) وعندي جدول آخر أسمه Employee.php لموظفين المدرسة ويوجد في الجدول نفس الحقل no_ministry مع كل موظف . السؤال أريد أن اعمل select لل (view('school.employee لموظفين الذين يحملون الرقم الوزاري الخاص بالمدرسة أي الخاص باليوزر للي داخل انا استطعت أن استدعي الرقم الوزاري في الكنترولر : $user = Auth::user()->no_ministry; لكن ما عرفت كيف أوظفه بالشكل الصحيح . ولكم تحياتي1 نقطة
-
يمكنك إستعمال التابع where لتحديد شرط التساوي بين الرقم الوزاري للمستخدم الحالي و الموظفين من جدول الموظفين : $no_ministry = Auth::user()->no_ministry; $selectemployees = Employee::select('id' , 'id_no' , 'name' , 'no_ministry' , 'staff' , 'phone') ->where('no_ministry' ,$no_ministry) ->get();1 نقطة
-
اريد ان اقوم بعرض سكرول فيو تحتوى على عمودين متقابلين وليس عمود واحد هذا هو الكود import React from 'react'; import {View, Text, StyleSheet} from 'react-native'; import {ScrollView} from 'react-native-gesture-handler'; const data = [ { id: 1, name: 'Ahmed', }, { id: 2, name: 'Ahmed', }, { id: 3, name: 'Ahmed', }, { id: 4, name: 'Ahmed', }, { id: 5, name: 'Ahmed', }, ]; const Card = ({id, name}: any) => { return ( <View style={styles.card}> <Text>{id}</Text> <Text>{name}</Text> </View> ); }; export default function CoulumnsInMap() { return ( <ScrollView> {data.map((item, index) => { return <Card key={index} id={item.id} name={item.name} />; })} </ScrollView> ); } const styles = StyleSheet.create({ card: { backgroundColor: 'dodgerblue', height: 200, width: '40%', justifyContent: 'center', alignItems: 'center', margin: 20, }, }); يمكننى فعلها باستخدام فلات ليست عن طريق columnsNum = 2 ولكنى مضطر لان اقوم بعملها باستخدام ال map هل هناك طريقة لفعلها ؟؟ اريد ان اعرض فى كل صف عمودين وليس عمود واحد1 نقطة
-
إذا قمت بتضمين ملف ال JavaScript بشكل صحيح باستخدام الوسم script كما أخبرتك في إجابة على السؤال السابق <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> <link rel="stylesheet" href="css/style.css"> <!--تضمين ملف جافاسكربت--> <script src="script/script.js"></script> </head> <body> </body> </html> ستلاحظ ظهور الخطأ التالي في ال console في المتصفح: Uncaught SyntaxError: Invalid or unexpected token script.js:10 و الذي يخبرك بوجود خطأ متعلق بقواعد كتابة اللغة في السطر رقم 10، و بالنظر إلى هذا السطر في الكود سنجد أنه السطر الذي قمت بتعريف المتغير mark فيه let mark = ' <div class= "card"> <div class= "child"> <h1> TITLE</h1> <P> HELLO FREINDS</P> </div> </div> '; طيب، ما هو الخطأ الذي خالف قواعد اللغة هنا؟ الخطأ هو استخدامك لعلامة التنصيص العادية ' ' لوضع أكواد ال html بداخلها، حيث أنه يفترض وضعها داخل backtick"شرطة مائلة" ` ` كما يلي حتى تتمكن من كتابة السلسلة النصية في أكثر من سطر، حيث أن جافاسكريبت لا تدعم ال multiple line strings بشكل افتراضي و إنما تدعم السلاسل النصية ذات السطر الواحد فقط. لذلك في es6 تمت إضافة الشرطة المائلة `` لعدة أسباب منها كتابة متغيرات داخل السلاسل النصية و كتابة سلاسل نصية في أكثر من سطر: let mark = ` <div class= "card"> <div class= "child"> <h1> TITLE</h1> <P> HELLO FREINDS</P> </div> </div> `; و سيعمل بشكل صحيح: المشروع الخاص بك بعد التعديل: project.zip1 نقطة
-
كيف اقوم بـ إرسال رسالة تحقق عند انشاء حساب في لارافيل ؟ ايميل-رقم جوال1 نقطة
-
كيف أستطيع إرسال data عن طريق ال url نفسه إلى السيرفر مثال / http://localhost:8000/register?username='mohammed'&age=301 نقطة
-
السلام عليكم ورحمة الله وبركاتة شكرا لكم على ما تقدمونه عندي استفسارين الاول متى تم اضافة لغة بايثون في دورة علوم الحاسوب وهل اضافة وتحديث الدورت قد يلغي بعض اللغات وتحذف ام مستمرة الثاني عرض خصم 40% لحاملين وثيقة العمل الحر بالسعودية مستمر لفترة طويلة لاني ارغب في الاشتراك في بعض الدورات ولكن بأنتظار الانتهاء من الدورات الحالية، واخاف ان ينتهي العرض شاكر ومقدر لكم بالبداية كنت اضن ان الدورات عادية جدا ولكن بالحقيقة الدورات جميلة جداً ومفيدة1 نقطة
-
بالإضافة إلى إجابة المدرب عبدالمجيد , ايضا يمكنك إزالة الأسطر من بين الكلمات في السطر التالي let mark = ' <div class= "card"> <div class= "child"> <h1> TITLE</h1> <P> HELLO FREINDS</P> </div> </div> '; وجعل الكلمات و الوسوم متلاصقة لأن جافاسكريبت حساسة لحالة الأحرف و الفراغات فيمكنك جعل الوسوم متلاصقة ببعضها في سطر واحد مثل الكود التالي let mark = '<div class= "card"><div class= "child"><h1> TITLE</h1><P> HELLO FREINDS</P></div></div>'; ثم تقوم بتجربة تنفيذ الكود مرة أخرى ستجد أن الكود يعمل بشكلٍ جيد.1 نقطة
-
إن كان حجم الصور كبيراً، عليك بضغطهم لتقليل حجمهم، استخدم أي ادوات من على الانترنت.. سبب عدم تحميل الصور مع file-loader هو أن html loader من الإصدار 2 أصبح يقوم بتحميل الصور بنفسه، و بتثبيت الإثنين معا، يحصل تضارب. الحل: إما تستعمل html loader الإصدار 1.3.2 حذف محدد امتداد الصور من file loader أو حذف القاعدة الخاصة بذلك نهائياً1 نقطة
-
1 نقطة
-
لديك خطأ بسيط في تضمين ملف ال JavaScript فكما ذكرت لك سابقًا، يتم تضمين ملفات JavaScript باستخدام الوسم script و يتم وضع المسار الخاص بملف ال JavaScript كقيمة لل src attribute كما يلي: <script src="script/script.js"></script> أمّا الوسم link فهو يستخدم لتضمين ملفات التنسيقات css الأكواد الخاصة بك بعد التعديل: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> <link rel="stylesheet" href="css/style.css"> <script src="script/script.js"></script> <!-- السطر التالي هو السبب في الخطأ الذي ظهر لك حيث أنك تقوم بتضمين ملف جافاسكريبت هنا و لكن المتصفح كان يتوقع ملف تنسيقات --> <!-- <link rel="stylesheet" href="script/script.js"> --> </head> <body> </body> </html>1 نقطة
-
يمكنك تحسين جودة الصوت (قوة الصوت) من خلال برامج مساعدة، مثلا إن كنت تستعمل متصفح غوغل كروم أو مايكروسوفت إيدج، يمكنك تثبيت الإضافة Ears: Bass Boost, EQ Any Audio! التي تسمح لك بتضخيم الصوت و يصبح قوياً ومسموعاً، كما يمكنك استخدام السماعات. يوجد برامج سطح مكتب و إضافات أخرى تحسن جودة التسجيل يمكنك البحث عنهم.1 نقطة
-
أولاً np.mean يحسب دائماً متوسطاً حسابياً، ولديه بعض الخيارات الإضافية للإدخال والإخراج (على سبيل المثال ، أنواع البيانات التي يجب استخدامها ، ومكان وضع النتيجة. numpy.mean(a, axis=None, dtype=None, out=None) أمثلة: a = np.array([[1, 2], [3, 4]]) np.mean(a) #2.5 np.mean(a, axis=0) #array([2., 3.]) np.mean(a, axis=1) #array([1.5, 3.5]) حيث أن الوسيط الأول هو المصفوفة، والثاني هي المحاور أو المحور الذي سيتم حساب المتوسط عليه.و الافتراضي none يعني حساب متوسط المصفوفة المسطحة أي كامل المصفوفة. أما الوسيط الثالث فهو النمط المستخدم في حساب المتوسط. بالنسبة لمدخلات الأعداد الصحيحة ، الافتراضي هو ؛ float64 ولمدخلات الفاصلة العائمة، وهو نفس نوع الإدخال dtype. أما الوسيط التالي فهو مصفوفة إخراج بديلة لوضع النتيجة فيها. ثانياً np.average يمكن حساب المتوسط الموزون إذا قمنا بتزويده بأوزان المعلمات. numpy.average(a, axis=None, weights=None) أول وثاني وسيط كما في التابع السابق لكن الوسيط الثالث هو مصفوفة الأوزان المرتبطة بالقيم الموجودة في المصفوفة. كل قيمة في a تساهم في المتوسط وفقاً للوزن المرتبط بها. يمكن أن تكون مصفوفة الأوزان إما 1-D (وفي هذه الحالة يجب أن يكون طولها بحجم a على طول المحور المحدد) أو من نفس الشكل مثل a. إذا كانت الأوزان = None، فسيتم افتراض أن جميع البيانات الموجودة في a لها نفس الوزن. أمثلة: data = np.arange(1, 5) np.average(data) #2.5 np.average(np.arange(1, 11), weights=np.arange(10, 0, -1)) #4.0 data = np.arange(6).reshape((3,2)) """ array([[0, 1], [2, 3], [4, 5]]) """ np.average(data, axis=1, weights=[1./4, 3./4]) #array([0.75, 2.75, 4.75]) np.average(data, weights=[1./4, 3./4]) # TypeError: Axis must be specified when shapes of a and weights differ.1 نقطة
-
يأخذ np.average مُدخل وزن اختياري. إذا لم يتم توفيره فهما متكافئان. ألقِ نظرة على الكود Mean, Average: np.mean: try: mean = a.mean except AttributeError: return _wrapit(a, 'mean', axis, dtype, out) return mean(axis, dtype, out) np.average: ... if weights is None : avg = a.mean(axis) scl = avg.dtype.type(a.size/avg.size) else: # كود الوزن هنا if returned: #returned هو معامل اختياري آخر scl = np.multiply(avg, 0) + scl return avg, scl else: return avg ...1 نقطة
-
يمكنك استخدام الدالة numpy.flip عن طريق تمرير الدالة argsort لها حيث سترد لك ال indexes للقيم مرتبة بترتيب تنازلي بعد أن يتم فرزها تصاعدياً باستخدام argsort حيث تقوم هذه الدالة بعكس ترتيب العناصر : import numpy as np a = np.array([2, 9, 7, 10, 5, 3]) n=3 ids = np.flip(np.argsort(a)) print(ids[0:n]) #[3 1 2] نفس الفكرة باستخدام np.flipud: import numpy as np a = np.array([2, 9, 7, 10, 5, 3]) n=3 ids = np.flipud(np.argsort(a)) print(ids[0:n]) #[3 1 2] أو يمكنك القيام بعكسها بإحدى الأشكال التالية: # نضرب المصفوفة بسالب وبالتالي يصبح الأصغر أكبر وبالتالي نحصل على الفهرس المطلوب np.argsort(-1*a)[:3] #- كما ويمكن استخدام المعامل # أي بشكل مشابه للطريقة السابقة (-a).argsort()[:3] # أو بالطريقة التقليدية عن طريق أخذ آخر 3 عناصر a.argsort()[::-1][:3] وكمقارنة: %timeit np.flipud(np.argsort(a))[0:3] %timeit np.flip(np.argsort(a))[0:3] %timeit np.argsort(-1*a)[:3] %timeit (-a).argsort()[:3] %timeit a.argsort()[::-1][:3] 5.14 µs ± 211 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each) 5.29 µs ± 337 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each) 4.57 µs ± 127 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each) 1.97 µs ± 288 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each) 1.86 µs ± 251 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each) # الطريقة الأخيرة أفضل1 نقطة
-
يمكنك القيام بذلك بشكل يدوي: import numpy as np A = np.random.randint(low=0,high=255, size=(2, 4)).astype(float) A """ array([[166., 246., 37., 195.], [ 63., 33., 189., 200.]]) """ th=127 A[A > th] = 255.0 A """ array([[255., 255., 37., 255.], [ 63., 33., 255., 255.]]) """ كما ويمكنك استخدام التابع np.putmask حيث نمرر له المصفوفة والعتبة والقيمة المراد الاستبدال بها: A = np.random.randint(low=0,high=255, size=(2, 4)).astype(float) """ array([[ 62., 23., 218., 205.], [197., 254., 149., 32.]]) """ # تحديد العتبة T=127 np.putmask(A, A>=T, 255.0) """ array([[ 62., 23., 255., 255.], [255., 255., 255., 32.]]) """ أو من خلال np.place حيث نمرر له المصفوفة، ثم العتبة كما في المثال، ثم القيمة المراد التحويل لها : A=np.array([[ 62., 23., 218., 205.], [197., 254., 149., 32.]]) np.place(A, A >=127, 255) """ array([[ 62., 23., 255., 255.], [255., 255., 255., 32.]]) """ أو من خلال np.where: A=np.array([[ 62., 23., 218., 205.], [197., 254., 149., 32.]]) np.where(A > 127, 255,A) """ array([[ 62., 23., 255., 255.], [255., 255., 255., 32.]]) """ كمقارنة: %timeit np.place(A, A >=127, 255) %timeit np.putmask(A, A>127, 255) %timeit np.where(A > 127, 255,A) 3.44 µs ± 197 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each) 3.03 µs ± 162 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each) 4.84 µs ± 1.15 µs per loop (mean ± std. dev. of 7 runs, 100000 loops each) # قريبتان من بعضهما لكن الأولى أفضل1 نقطة
-
اذا كانت المصفوفة فارغة empty ، فان حجمها يجب أن يكون صفرا، لذلك فان اسهل طريقة للتاكد اذا كانت فارغة ام لا هو أن تقومبالتحقق من حجمها كالتالي: import numpy as np a = np.array([]) if a.size == 0: print(empty) مثال تطبيقي: empty_array = np.array([]) is_empty = empty_array.size == 0 print(is_empty) OUTPUT True nonempty_array = np.array([1, 2, 3]) is_empty = nonempty_array.size == 0 print(is_empty) OUTPUT False1 نقطة
-
هناك أكثر من طريقة لتحقيق هذا منها: الطريقة التقليدية: عن طريق تفحص كل العناصر وتبديل العناصر التي تحقق الشرط المطلوب كالتالي: shape = arr.shape result = np.zeros(shape) for x in range(0, shape[0]): for y in range(0, shape[1]): if arr[x, y] >= T: result[x, y] = 255 الطريقة السهلة: عن طريق استخدام ال fancy indexing كالتالي، الكود التالي يوضح كيفية استخدامها جميع العناصر الاكبر من 0.5 بقيمة أخرى وهي 0.5 import numpy as np x = np.array([[ 0.42436315, 0.48558583, 0.32924763], [ 0.7439979,0.58220701,0.38213418], [ 0.5097581,0.34528799,0.1563123 ]]) print("Original array:") print(x) print("Replace all elements of the said array with .5 which are greater than .5") x[x > .5] = .5 print(x) ويكون الخرج كالتالي: Original array: [[ 0.42436315 0.48558583 0.32924763] [ 0.7439979 0.58220701 0.38213418] [ 0.5097581 0.34528799 0.1563123 ]] Replace all elements of the said array with .5 which are greater than . 5 [[ 0.42436315 0.48558583 0.32924763] [ 0.5 0.5 0.38213418] [ 0.5 0.34528799 0.1563123 ]]1 نقطة
-
يمكنك استخدام numpy.ndarray.size. فعن طريق الوصول إلى عدد العناصر في numpy.ndarray باستخدام numpy.ndarray.size. يمكنك تحديد فيما إذا كانت المصفوفة فارغة أم لا حيث، إذا كان عدد العناصر في المصفوفة يساوي 0 ، فإن المصفوفة فارغة: import numpy as np empty_array = np.array([]) is_empty = empty_array.size == 0 is_empty # True ################################ empty_array = np.array([1,2]) is_empty = empty_array.size == 0 is_empty # False حسناً قد تظهر لنا مشكلة عندما يتم تعريف المصفوفة الفارغة بالشكل np.array(None) حيث أن ناتج تطبيق size سيكون 1، لذا لحل المشكلة: import numpy as np empty_array = np.array(None) is_empty = False if empty_array.size and empty_array.ndim else True is_empty # True ########################## import numpy as np empty_array = np.array([]) is_empty = False if empty_array.size and empty_array.ndim else True is_empty # True ######################### import numpy as np empty_array = np.array([1]) is_empty = False if empty_array.size and empty_array.ndim else True is_empty # False ويمكنك كتابة التابع التالي الذي يشمل كل ماسبق: def elements(array): return False if array.ndim and array.size else True elements(np.array([1])) #False elements(np.array([])) # True elements(np.array(None)) # True كما ويمكنك استخدام الدالة np.any، لكن القيد على هذه الوظيفة هو أنها لا تعمل إذا كانت المصفوفة تحتوي على القيمة 0 فيها. import numpy as np arr = np.array([]) flag = not np.any(arr) if flag: print('empty') else: print('not empty') # empty ############################# arr = np.array(None) flag = not np.any(arr) if flag: print('empty') else: print('not empty') # empty ############################ arr = np.array([1]) flag = not np.any(arr) if flag: print('empty') else: print('not empty') # not empty أو من خلال تحويلها لقائمة: import numpy as np arr = np.array([1]) if len(arr.tolist()) == 0: print("Empty") else: print("Not") قمنا أولاً بتحويل المصفوفة إلى قائمة باستخدام طريقة tolist (). ثم تحققنا من حجم القائمة باستخدام طريقة len () للتحقق مما إذا كانت المصفوفة فارغة.، لكن في حال تم تعريف المصفوفة من خلال None فسيظهر خطأ لذا لحل المشكلة قمت بتعريف التابع التالي: def test(a): try: if len(a.tolist()) == 0: return "Empty" else: return "Not" except: return "Empty" test(np.array([1])) # 'Not' test(np.array([])) # 'Empty' test(np.array(None)) # 'Empty' وأخيراً من خلال التبع shape: import numpy as np a = np.array([]) if a.shape[0] == 0: print("Empty") وذلك من خلال التحقق مما إذا كان عدد العناصر في المحور 0 ، أي الصف ، صفراً أم لا.1 نقطة
-
حتى نستطيع عكس الترتيب للتنازلي بواسطة 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 نقطة
-
يمكنك استخدام الدالة 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 نقطة
-
يمكنك استخدام الخاصية .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 #11 نقطة
-
لنتناول مختلف اﻷحداث التي ترافق تحديث المُعطيات. الحدث: change يقع الحدث change عند تمام تغيّر العنصر. بالنسبة للمُدخلات النصّيّة، ذلك يعني أنّ الحدث يقع عندما تفقد التركيز. على سبيل المثال، عند الكتابة في الحقل النصيّ أدناه، لا يكون هناك أيّ حدث. لكن عندما ننقل التركيز إلى مكان آخر، كالنقر على زرّ مثلا، سيكون لدينا الحدث change: <input type="text" onchange="alert(this.value)"> <input type="button" value="Button"> See the Pen JS-events-change-input-ex1 by Hsoub (@Hsoub) on CodePen. بالنسبة للعناصر الأخرى select وinput type=checkbox/radio ، فإنّ الحدث يقع بعد تغيّر التحديد مباشرة: <select onchange="alert(this.value)"> <option value="">Select something</option> <option value="1">Option 1</option> <option value="2">Option 2</option> <option value="3">Option 3</option> </select> See the Pen JS-events-change-input-ex2 by Hsoub (@Hsoub) on CodePen. الحدث: input يقع الحدث input كلّما غيّر المستخدم القيمة التي في المُدخل. وبخلاف أحداث لوحة المفاتيح، يقع هذا الحدث عند كلّ تغيّر في القيمة، حتى لو لم يكن ناجما عن أفعال لوحة المفاتيح، كاللصق بواسطة الفأرة أو استعمال التعرّف على الصوت لإملاء النصّ. على سبيل المثال: <input type="text" id="input"> oninput: <span id="result"></span> <script> input.oninput = function() { result.innerHTML = input.value; }; </script> See the Pen JS-events-change-input-ex3 by Hsoub (@Hsoub) on CodePen. إذا أردنا معالجة جميع التغيّرات في <input> فإنّ هذا الحدث هو الخيار اﻷمثل. في المقابل، لا يقع input عند أفعال لوحة المفاتيح أو غيرها من اﻷفعال التي لا تؤدّي إلى تغيّر القيمة، مثل الضغط على مفاتيح اﻷسهم ⇦ و⇨ في المُدخل. ملاحظة: لا يمكن منع أيّ شيء في oninput يقع الحدث input بعد تغيّر القيمة، ولذا لا يمكننا استعمال event.preventDefault() هناك -- قد فات الآوان، لن يكون لذلك أيّ أثر. الأحداث: cut وcopy وpaste تقع هذه اﻷحداث عند قصّ/نسخ/لصق قيمة ما، وهي تنتمي إلى الصنف ClipboardEvent، وتُمكّن من الوصول إلى المُعطيات التي قُصّت/أُلصقت. يمكننا أيضا استخدام event.preventDefault() معها لإلغاء الفعل، فلا يتمّ بذلك نسخ/لصق أيّ شيء. على سبيل المثال، تمنع الشيفرة أدناه وقوع أيّ من هذه اﻷحداث، وتُظهر ماذا نحاول قصّه/نسخه/لصقه: <input type="text" id="input"> <script> input.oncut = input.oncopy = input.onpaste = function(event) { alert(event.type + ' - ' + event.clipboardData.getData('text/plain')); return false; }; </script> See the Pen JS-events-change-input-ex4 by Hsoub (@Hsoub) on CodePen. يُرجى التنبّه إلى أنّه لا يمكن نسخ/لصق النصّ فقط، بل أيّ شيء، مثل نسخ ملفّ في مدير الملفّات في نظام التشغيل، ولصقه. هذا لأنّ clipboardData تتضمّن الواجهة DataTransfer، التي تُستخدم في السحب والإفلات والنسخ/اللصق. تُعدّ هذه الأمور خارجة قليلا عن موضوعنا الآن، لكن يمكنك أن تجد التوابع الخاصّة بها في المواصفة. . تنبيه: ClipboardAPI: قيود تتعلّق بسلامة المستخدم الحافظة هي شيء "عموميّ" على مستوى نظام التشغيل. لذا فإنّ معظم المتصفّحات تمكّن من الوصول إلى الحافظة قراءة وكتابة لكن في نطاق بعض أفعال المستخدم فقط بداعي السلامة، كما في معالجات اﻷحداث onclick مثلا. ويُمنع كذلك توليد أحداث "مخصّصّة" للحافظة باستخدام dispatchEvent في جميع المتصفّحات باستثناء Firefox. الملخص أحداث تغيير المعطيات: الحدث الوصف الخصائص change عند تغيّر قيمة ما بالنسبة للمُدخلات النصّيّة، يقع عند فقدانها التركيز. input عند كلّ تغيّر في المُدخلات النصّية يقع مباشرة، على خلاف change. cut/copy/paste عند أفعال القصّ/النسخ/اللصق. يمكن منع الفعل، وتتيح الخاصّيّةُ event.clipboardData إمكانيّة القراءة من/الكتابة في الحافظة. table { width: 100%; } thead { vertical-align: middle; text-align: center; } td, th { border: 1px solid #dddddd; text-align: right; padding: 8px; text-align: inherit; } tr:nth-child(even) { background-color: #dddddd; } التمارين حاسبة الإيداع اﻷهميّة: 5 أنشئ واجهة تُمكّن من إدخال القيمة المودعة في البنك إضافة إلى النسبة، ثمّ تحسب كم ستصبح القيمة بعد مدّة مُعيّنة من الزمن. كما في المثال من هنا. يجب أن يُعالج أيّ تغيّر في المُدخل مباشرة. المعادلة هي كالتالي: // القيمة الابتدائيّة للنقود :initial // تعني 0.05 مثلا، %5 سنويّا :interest // كم عاما من الانتظار :years let result = Math.round(initial * (1 + interest * years)); أنجز التمرين في البيئة التجريبيّة الحل افتح الحلّ في البيئة التجريبيّة ترجمة -وبتصرف- للمقال Events: change, input, cut, copy, paste من سلسلة Browser: Document, Events, Interfaces لصاحبها Ilya Kantor1 نقطة