تحتوي مصفوفتنا int8 على 61 و 64 و 70، لكن iinfo تعرض −128 و 127. لم تظهر هاتان القيمتان في البيانات أصلًا. سنفصل حدود النوع عن أصغر عنصر وأكبره، ونقارن مثيلين يحملان 61 بنوعين مختلفين.
حدود نوع وقيم موجودة
تعرض iinfo حدود النوع الصحيح، وتقبل نوعًا أو وصف نوع أو مثيلًا. خصائصها تشمل bits وmin وmax وdtype. [1] نسمي الناتج كائن معلومات، لا أصغر عنصر في المصفوفة.
توثق min أصغر قيمة في المصفوفة، ويكون الناتج مفردًا عند axis=None. [2] وتوثق max أكبر قيمة بالطريقة نفسها. [3] نستعمل الإعداد الافتراضي على متجه غير فارغ.
التجربة في NumPy 2.3.5 على CPython 3.12.14. القيم مؤلفة بلا وحدات أو قياس. نكتب اسم النوع قبل الحدين، ونكتب عناصر المصفوفة قبل قيمتي min وmax؛ لا نخلط عناوين العمودين.
وجود حدود للنوع لا يعني أن كل حد موجود في البيانات الحالية. سنفحص هذا الفرق بمثيل مفرد وبوصف نوع مصفوفة، ثم نغير النوع مع الحفاظ على القيمة 61 في تحكم مستقل.
العدد 61 ومتجه من ثلاث قيم
أنشأنا s=np.int8(61)، ثم شغلنا info=np.iinfo(s). رصدنا bits=8 وmin=-128 وmax=127، ووصف النوع int8. العدد الذي مررناه 61، لكن min لم ترجع 61 وmax لم ترجع 61.
وبشكل مستقل أنشأنا A=np.array([61,64,70],dtype=np.int8)، بالشكل (3,). أعاد np.iinfo(A.dtype) الحدود نفسها −128 و 127 وعدد البتات 8. مررنا وصف نوع A، لا عناصرها بوصفها عينة تحتاج ترتيبًا.
استدعينا np.min(A) وnp.max(A) دون وسيط إضافي. خرج العددان 61 و 70 من النوع numpy.int8. في قائمتنا 61 أصغر من 64 ومن 70، و 70 أكبر منهما؛ هذه قراءة للقيم الثلاث المعطاة.
لا يوجد −128 أو 127 داخل A. ومع ذلك ظهر الحدّان في كائن المعلومات. ولو استعملنا info.min وinfo.max بوصفهما طرفي بياناتنا، لوصفنا مجموعة مختلفة عن المصفوفة التي أنشأناها.
حفظنا بايتات A قبل النداءات وبعدها، فكانت 3d4046 في المرتين، وبقي الشكل والنوع والعناصر كما أعطيناها. لم ينشئ كائن المعلومات مصفوفة بديلة، ولم ندّع اختبار تغيير الذاكرة بالكتابة إليه.
القيمة نفسها لا تحدد المجال
أنشأنا u=np.uint8(61) مستقلًا عن s. أعاد np.iinfo(u) عدد البتات 8 والحدين 0 و 255، ووصف uint8. بقيت القيمة المدخلة 61 في المثيلين، لكن الحدين اختلفا مع النوع.
إذن لا نستنتج مجال التمثيل من مقدار العدد المعطى وحده. في هذه المقارنة النوع المعلن هو الذي تغير؛ لم ننفذ astype أو سياسة casting، ولم نختبر حفظ قيم أخرى عند تحويلها بين النوعين.
في تحكم مستقل أنشأنا np.int8(-61). أعادت iinfo الحدود −128 و 127 وعدد البتات 8 نفسها. تغيرت القيمة وإشارتها عن s، ولم يتغير وصف int8 الذي نراجع حدوده.
وفي تحكم آخر أعطينا np.int16(61). رصدنا 16 بتًا وحدًا أدنى −32768 وأعلى 32767. يوضح هذا التحكم أن بقاء القيمة 61 لا يمنع اختلاف المعلومات عندما يتغير النوع إلى int16.
نراجع حدودنا المعلنة بحساب مستقل: ثمانية بتات غير موقعة من 0 إلى 2**8−1، وثمانية موقعة من −2**7 إلى 2**7−1. وللنوع الموقع ذي 16 بتًا نستعمل −2**15 إلى 2**15−1 في مرجع هذه الأنواع.
هذه حدود مرجعية للأنواع المحددة في تشغيلنا. لا نقيس بها مجال جهاز أو دقة قراءة، ولا نستنتج نتيجة جمع أو تحويل خارج الحدود. كذلك لم نقس حجم كائن Python كاملًا من خاصية bits.

حصر النداءات ومشاهدات الخصائص
أنشأنا 17 أسرة مستقلة، بقيم n الصحيحة من 61 إلى 77. لكل أسرة مثيل int8 بقيمة n ومثيل uint8 بالقيمة نفسها، ومتجه int8 بعناصر [n,n+3,n+9]. اختلفت بايتات المتجهات السبعة عشر، وبقي كل منها ثابتًا خلال ندائاته.
لكل أسرة ثلاثة استدعاءات iinfo: المثيلان ووصف نوع المتجه. وأضفنا min وmax للمتجه، فكان الحساب 17×5=85 نداءً مسمى. تحكما السالب والنوع الأوسع أضافا ندائي iinfo مستقلين؛ المجموع 87.
توزعت النتائج إلى 53 كائن معلومات و 34 قيمة عددية مفردة من min وmax. حفظنا كائنات المعلومات بملخصات منظمة لنوع الكائن وخصائصه. لا نسمي الكائنات الثلاثة والخمسين أعدادًا، ولا نجمعها إلى العدد 34 لنعلن 87 خرجًا عدديًا.
قرأنا أربع خصائص لكل كائن: bits وmin وmax وdtype، فكان عدد مشاهدات الخصائص 212. معلومات اسم وصف النوع وفئته وحجم عنصره حقول مرافقة؛ ليست 212 نداءً جديدًا أو مخارج عددية إضافية من min وmax.
بنى المرجع حدود الأنواع بقوى اثنين معلنة قبل الاستدعاءات. وللقائمة [n,n+3,n+9] توقع n وn+9 بالمقارنة الصحيحة، دون استعمال iinfo أوmin أوmax لبناء التوقع. وافقت مشاهدات الحدود والقيم ذلك المرجع.
لا يشمل عد النداءات المسماة إنشاء المدخلات أو التقاط البايتات أو قراءة الخصائص أو تحويل الأعداد للعرض. لم نفحص الصفر أو أطراف المجالات أو خارجها أو أنواعًا أخرى أو مدخلًا فارغًا أو محورًا آخر أو where أوinitial أوout أوkeepdims أو أداءً. احتفظ بالنوع والحدين من جهة، وبالبيانات وطرفيها المرصودين من جهة أخرى.
| Query | Minimum | Maximum | Meaning |
|---|---|---|---|
| iinfo(int8(61)) | -128 | 127 | int8 limits |
| iinfo(A.dtype) | -128 | 127 | int8 limits |
| min(A) / max(A) | 61 | 70 | A=[61,64,70] |
| iinfo(uint8(61)) | 0 | 255 | uint8 limits |
للتوسع: مجال الأعداد الصحيحة.
المراجع
أُعدّ هذا المقال بمساعدة الذكاء الاصطناعي، وخضع لمراجعة ذاتية بالأداة نفسها. لا يُنسب إلى مراجع بشري أو خبير مستقل. منهجية المحتوى.
