Amer Abdallah نشر 9 أغسطس 2021 أرسل تقرير نشر 9 أغسطس 2021 لدي قائمة بايثون متداخلة كالتالي: lst = [ [2.74, 462, 2366.64, 887558.86, 0.81], [8.55, 17, 1422.3, 3212.0, 0.97], [1.02, 768, 6004865.3, 1960.98, 1.21], [2.4, 2406, 3263822121.3, 1087.9, 1.93], [0.5, 454, 44555062, 155062.72, 0.41], [4.5, 106, 168918, 741272.74, 3.25], [5.7, 787, 3011595.6, 21989471.31, 2.18], [6.3, 117, 12511.4, 1291.0, 1.56], [5.51, 117, 47674230.76, 7181.0, 1.43], [0.85, 771, 1631.96, 2184.08, 0.64] ] عندما أقوم بتحويل القائمة إلى مصفوفة Numpy كالتالي: np.array(lst) أحصل على هذه النتيجة: array([[2.74000000e+00, 4.62000000e+02, 2.36664000e+03, 8.87558860e+05, 8.10000000e-01], [8.55000000e+00, 1.70000000e+01, 1.42230000e+03, 3.21200000e+03, 9.70000000e-01], [1.02000000e+00, 7.68000000e+02, 6.00486530e+06, 1.96098000e+03, 1.21000000e+00], [2.40000000e+00, 2.40600000e+03, 3.26382212e+09, 1.08790000e+03, 1.93000000e+00], [5.00000000e-01, 4.54000000e+02, 4.45550620e+07, 1.55062720e+05, 4.10000000e-01], [4.50000000e+00, 1.06000000e+02, 1.68918000e+05, 7.41272740e+05, 3.25000000e+00], [5.70000000e+00, 7.87000000e+02, 3.01159560e+06, 2.19894713e+07, 2.18000000e+00], [6.30000000e+00, 1.17000000e+02, 1.25114000e+04, 1.29100000e+03, 1.56000000e+00], [5.51000000e+00, 1.17000000e+02, 4.76742308e+07, 7.18100000e+03, 1.43000000e+00], [8.50000000e-01, 7.71000000e+02, 1.63196000e+03, 2.18408000e+03, 6.40000000e-01]]) لا أعرف لمذا يتم تغيير شكل الأرقام إلى شكل علمي للغاية، بالرغم من أن هذا الأمر لا يحدث عند عمل مصفوفة من قائمة عادية (ليس قائمة متداخلة): np.array([4.2, 6.5, 9.142]) # Output: [4.2 6.5 9.142] ما الذي يسبب هذه المشكلة وكيف يمكنني إيقافها في Numpy حتى لا أقوم بذلك في كل مصفوفة في البرنامج؟ 1 اقتباس
1 سمير عبود نشر 10 أغسطس 2021 أرسل تقرير نشر 10 أغسطس 2021 يُمكنك إستخدام np.set_printoptions(suppress=True) لكنها تعمل على الأعداد التي تتكون من 8 خانات على الأكثر مثلاً: import numpy as np np.set_printoptions(suppress=True) lst = [ [2.74, 462, 2366.64, 887558.86, 0.81], [8.55, 17, 1422.3, 3212.0, 0.97], [1.02, 768, 6004865.3, 1960.98, 1.21], [2.4, 2406, 3263822.3, 1087.9, 1.93], [0.5, 454, 44555062, 155062.72, 0.41], [4.5, 106, 168918, 741272.74, 3.25], [5.7, 787, 3011595.6, 219894.31, 2.18], [6.3, 117, 12511.4, 1291.0, 1.56], [5.51, 117, 47674230.76, 7181.0, 1.43], [0.85, 771, 1631.96, 2184.08, 0.64] ] lnp = np.array(lst) print(lnp) و سيكون الخرج بهذا الشكل: [[ 2.74 462. 2366.64 887558.86 0.81] [ 8.55 17. 1422.3 3212. 0.97] [ 1.02 768. 6004865.3 1960.98 1.21] [ 2.4 2406. 3263822.3 1087.9 1.93] [ 0.5 454. 44555062. 155062.72 0.41] [ 4.5 106. 168918. 741272.74 3.25] [ 5.7 787. 3011595.6 219894.31 2.18] [ 6.3 117. 12511.4 1291. 1.56] [ 5.51 117. 47674230.76 7181. 1.43] [ 0.85 771. 1631.96 2184.08 0.64]] ومع ذلك ، إذا قمت بتمرير رقم أكبر من 8 خانات، فسيتم فرض الترميز الأسي مرة أخرى في هذه الحالة يُمكنك تمرير معامل ثاني formatter للدالة set_printoptions بهذا الشكل: np.set_printoptions(suppress=True, formatter={'float_kind':'{:0.2f}'.format}) و بهذا الشكل حددنا أنه عند الطباعة الأرقام ستكون عشرية و حددنا عدد الأرقام بعد الفاصلة ب 2 مثال: import numpy as np np.set_printoptions(suppress=True, formatter={'float_kind':'{:0.2f}'.format}) lst = [ [2.74, 462, 2366.64, 887558.86, 0.81], [8.55, 17, 1422.3, 3212.0, 0.97], [1.02, 768, 6004865.3, 1960.98, 1.21], [2.4, 2406, 3263822121.3, 1087.9, 1.93], [0.5, 454, 44555062, 155062.72, 0.41], [4.5, 106, 168918, 741272.74, 3.25], [5.7, 787, 3011595.6, 21989471.31, 2.18], [6.3, 117, 12511.4, 1291.0, 1.56], [5.51, 117, 47674230.76, 7181.0, 1.43], [0.85, 771, 1631.96, 2184.08, 0.64] ] lnp = np.array(lst) print(lnp) و سيكون الخرج: [[2.74 462.00 2366.64 887558.86 0.81] [8.55 17.00 1422.30 3212.00 0.97] [1.02 768.00 6004865.30 1960.98 1.21] [2.40 2406.00 3263822121.30 1087.90 1.93] [0.50 454.00 44555062.00 155062.72 0.41] [4.50 106.00 168918.00 741272.74 3.25] [5.70 787.00 3011595.60 21989471.31 2.18] [6.30 117.00 12511.40 1291.00 1.56] [5.51 117.00 47674230.76 7181.00 1.43] [0.85 771.00 1631.96 2184.08 0.64]] اقتباس
0 Ali Haidar Ahmad نشر 10 أغسطس 2021 أرسل تقرير نشر 10 أغسطس 2021 (معدل) من خلال Numpy يمكننا التحكم في شكل طباعة المصفوفات عن طريق التابع numpy.set_printoptions حيث أن الوسيط suppress يستطيع التحكم في ذلك، فضبطه على True سوف يلغي هذا الترميز: import numpy as np arr = np.array([[3.1415, 2.7182],[6.6260e-34, 6.6743e-11]]) #نتحكم بعدد الأرقام بعد الفاصلة precision من خلال الوسيط np.set_printoptions(precision=2) print(arr) """ [[3.14e+00 2.72e+00] [6.63e-34 6.67e-11]] """ np.set_printoptions(suppress=True) # إلغاء الترميز الأسي print(arr) """ [[3.14 2.72] [0. 0. ]] """ np.set_printoptions(suppress=False) print(arr) """ [[3.14e+00 2.72e+00] [6.63e-34 6.67e-11]] """ لكن هذا لاينفع مع الأعداد التي تحوي على أكثر من 8 أرقام، وأي محاولة لقمع الترميز الأسي في هذه الحالة لن يكون خياراً جيداً. تم التعديل في 10 أغسطس 2021 بواسطة Ali Haidar Ahmad 1 اقتباس
0 عبدالباسط ابراهيم نشر 10 أغسطس 2021 أرسل تقرير نشر 10 أغسطس 2021 يمكنك بالطبع عن طريق تغيير إعدادات الطباعة من خلال 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] اقتباس
السؤال
Amer Abdallah
لدي قائمة بايثون متداخلة كالتالي:
عندما أقوم بتحويل القائمة إلى مصفوفة Numpy كالتالي:
أحصل على هذه النتيجة:
لا أعرف لمذا يتم تغيير شكل الأرقام إلى شكل علمي للغاية، بالرغم من أن هذا الأمر لا يحدث عند عمل مصفوفة من قائمة عادية (ليس قائمة متداخلة):
ما الذي يسبب هذه المشكلة وكيف يمكنني إيقافها في Numpy حتى لا أقوم بذلك في كل مصفوفة في البرنامج؟
3 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.