Fahmy Mostafa نشر 25 يوليو 2021 أرسل تقرير نشر 25 يوليو 2021 لدي مجموعة بيانات من المسافات تسمى dists. أريد تحديد المسافات التي تكون بين قيمتين. لقد كتبت السطر التالي للقيام بذلك: dists[(np.where(dists >= r)) and (np.where(dists <= r + dr))] لكن بالرغم من ذلك أحصل على نفس النتيجة وكأني أستعمال الشرط التالي: (np.where(dists <= r + dr)) إذا قمت بتنفيذ الأوامر بالتسلسل باستخدام متغير مؤقت ، فإنه يعمل بشكل جيد. لماذا لا يعمل الكود أعلاه ، وكيف يمكنني تشغيله؟ 1 اقتباس
1 عبدالله عبدالرحمن11 نشر 25 يوليو 2021 أرسل تقرير نشر 25 يوليو 2021 أفضل طريقة في حالتك الخاصة هي فقط تغيير المعيارين إلى معيار واحد: dists[abs(dists - r - dr/2.) <= dr/2.] والإجابة على سؤالك: انت لست بحاجة فعلاً الى where إذا كنت تحاول فقط تصفية عناصر dists التي لا تتناسب مع معاييرك: dists[(dists >= r) & (dists <= r+dr)] لأن & سيعطيك عنصرًا أساسيًا and (الأقواس ضرورية). أو ، إذا كنت تريد الاستخدام where لسبب ما ، فيمكنك القيام بما يلي: dists[(np.where((dists >= r) & (dists <= r + dr)))] 1 اقتباس
1 Ali Haidar Ahmad نشر 26 يوليو 2021 أرسل تقرير نشر 26 يوليو 2021 (معدل) لاتستخدم And هنا، يمكنك استخدام: dists[(dists >= r) & (dists <= r+dr)] # أو dists[(np.where((dists >= r) & (dists <= r + dr)))] لأن & هو "element-wise and" أي يطبق عملية and على أطراف العلاقة بت بت (وهذا سبب تسمية هذه المعاملات ب bitwise). إن np.where تعيد قائمة من الفهارس وليس مصفوفة بوليانية، وأنت تحاول استخدام and مع مصفوفتين من الأرقام (ليست قيم بوليانية). وبالتالي إذا كنت x و y كلاهما True فهذا يعني أن a and b=b: [0،3،6] and [2،5،4]=[2،5،4] لاحظ معي: ##################################################################### dists = np.arange(0,8,.7) r = 5 dr = 1 np.where(dists >= r) #(array([ 8, 9, 10, 11], dtype=int64),) np.where(dists <= r+dr) #(array([0, 1, 2, 3, 4, 5, 6, 7, 8], dtype=int64),) np.where(dists >= r) and np.where(dists <= r+dr) #(array([0, 1, 2, 3, 4, 5, 6, 7, 8], dtype=int64),) ##################################################################### # أما الذي كنت تتوقع مقارنته هو مصفوفة منطقية، على سبيل المثال dists >= r #array([False, False, False, False, False, False, False, False, True, True, True, True]) dists <= r + dr # array([ True, True, True, True, True, True, True, True, True, False, False, False]) (dists >= r) & (dists <= r + dr) # array([False, False, False, False, False, False, False, False, True, False, False, False]) يمكنك الآن استدعاء np.where على المصفوفة المنطقية المدمجة: dists[np.where((dists >= r) & (dists <= r + dr))] تم التعديل في 26 يوليو 2021 بواسطة Ali Haidar Ahmad 1 اقتباس
0 عبدالباسط ابراهيم نشر 26 يوليو 2021 أرسل تقرير نشر 26 يوليو 2021 يمكنك استخدام المعاملات المنطقية التي توفرها numpy وفي حالتك تريد تنفيذ عدة شروط فيمكنك استخدام المعامل numpy.logical_and ليصبح الكود كالتالي np.where(np.logical_and(np.greater_equal(dists,r),np.greater_equal(dists,r + dr))) لاحظ أننا استخدمنا المعامل greater_equal يمكننا قراءة المزيد من المعلومات حول المعاملات المنطقية من هنا 1 اقتباس
السؤال
Fahmy Mostafa
لدي مجموعة بيانات من المسافات تسمى dists. أريد تحديد المسافات التي تكون بين قيمتين. لقد كتبت السطر التالي للقيام بذلك:
لكن بالرغم من ذلك أحصل على نفس النتيجة وكأني أستعمال الشرط التالي:
إذا قمت بتنفيذ الأوامر بالتسلسل باستخدام متغير مؤقت ، فإنه يعمل بشكل جيد. لماذا لا يعمل الكود أعلاه ، وكيف يمكنني تشغيله؟
3 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.