علوم وفضاء

isfortran: لماذا لا تكفي علامة F؟

متجه وصف وعمود يحققون C وF معًا.
علم F صحيح، لكن isfortran غير صحيحة في هذه المدخلات.

نقارن علمي C وF بنتيجة isfortran على مصفوفات مؤلفة. وجود علامة F صحيحة لا يمنع أن تكون نتيجة الدالة False؛ شرطها يتضمن علمًا ثانيًا.

شرطان بدل علم واحد

تختبر isfortran أن F_CONTIGUOUS صحيحة وC_CONTIGUOUS غير صحيحة؛ الوثائق تصفها بأنها متقادمة، وتقترح f_contiguous لفحص F وحدها. [1] [2]

يسمح وصف الأعلام بأن تكون C وF صحيحتين معًا؛ FNC هي F مع نفي C. [3]

التنفيذ المحدد للدالة يعيد a.flags.fnc. [2]

لذلك نسجل ثلاثة أسئلة منفصلة: هل علم F صحيح؟ هل علم C صحيح؟ وما نتيجة المحمول الذي يطلب الأول ويستبعد الثاني؟ مثالنا يضع قيم هذه الأسئلة جنبًا إلى جنب.

مدخلات كتبنا لها order F

شغّلنا NumPy 2.3.5 على CPython 3.12.14. اخترنا القيم [8,-3,2,5]، وبنينا ثلاث مصفوفات مستقلة من int64؛ الأعداد مؤلفة وليست مثال الوثائق.

الأولى np.array([8,-3,2,5],dtype=np.int64,order='F') بالشكل (4,). الثانية لها القيم [[8,-3,2,5]] بالشكل (1,4)، والثالثة [[8],[-3],[2],[5]] بالشكل (4,1)، مع dtype وorder نفسيهما.

المتجه والصف والعمود يحمل كل منها أربع قيم، لكن صفًا واحدًا أو عمودًا واحدًا يترك محورًا طوله واحد في المدخل الثنائي. لا نستنتج نتيجة الدالة من كلمة F في الإنشاء؛ نقرأ الأعلام المسجلة بعدها.

لكل مصفوفة حفظنا القيم والشكل، ثم قرأنا flags.c_contiguous وflags.f_contiguous وflags.fnc، واستدعينا np.isfortran مرة واحدة.

F صحيحة والنتيجة False

في المتجه بالشكل (4,) سجلنا C=True وF=True، وFNC=False، وأعادت isfortran القيمة False. الصف (1,4) والعمود (4,1) أعطيا القيم المنطقية الأربع نفسها.

علم F هنا صحيح، لكن شرط استبعاد C غير متحقق. نفي True يعطي False، ثم True مع False يعطي False في المرجع المنطقي المؤلف.

كتبنا للمقارنة مصفوفة جديدة [[8,-3],[2,5]] من int64 بالشكل (2,2) مع order='F'. لها صفان وعمودان؛ سجلنا C=False وF=True، وFNC=True وisfortran=True.

بنينا ضبطًا مستقلًا بالقيم والشكل نفسيهما مع order='C'. سجلنا C=True وF=False، وFNC=False وisfortran=False. تساوي القيم بين مصفوفتَي الضبط لا يجعل الأعلام متساوية.

جميع المصفوفات بقيت بقيمها وأشكالها الأصلية، وبايتات المدخل ثابتة بعد الفحص. لم نغير الأعلام أو نعدل عنصرًا؛ هذه تجربة قراءة أعلام ومحمول منطقي.

نتيجة False تظهر في مدخلات علم F فيها صحيح وفي ضبط علم F فيه غير صحيح. لهذا لا نستعمل False وحدها جوابًا عن سؤال F في هذه السجلات.

مصفوفتان بالشكل (2,2) مع ترتيب F وC.
نتيجة isfortran تختلف مع تغير العلمين.

شبكة القيم وحدود الدليل

كتب مرجعنا الأعلام المتوقعة حسب الأشكال وطريقة الإنشاء المعلنة: المتجه والصف والعمود في تجربتنا يحققون العلمين؛ المصفوفة (2,2) مع F تحقق F وحدها، ومع C تحقق C وحدها. ثم حسب Python شرط F مع نفي C.

هذا مرجع مؤلف لحالات الإنشاء المحددة، لا محاكاة لكل تخطيط ممكن. لم نأخذ العلم المتوقع من أعلام NumPy أو من isfortran التي نفحصها.

للقوائم اخترنا أطوالًا من واحد إلى أربعة وقيم الخانات من -2 و0 و3. لدينا 3+9+27+81=120 قائمة، ولكل قائمة ثلاث مجموعات: متجه وصف وعمود مع F. تعطي الشبكة 360 مجموعة.

للمصفوفة (2,2) أربع خانات، فتوجد 3^4=81 حالة بقيم الشبكة. لكل حالة إنشاء F وآخر C، أي 162 مجموعة أخرى.

أضفنا حالة القائمة الرئيسية بثلاث مجموعات وحالة المصفوفة الرئيسية بمجموعتين. الإجمالي 120+81+2=203 حالات، و360+162+5=527 مجموعة؛ مرت كلها.

في كل مجموعة راجعنا قيم C وF وFNC وisfortran، والقيم والأشكال ونوع int64، وبقاء بايتات المدخل. عدد استدعاءات isfortran هو 527؛ إنشاء مصفوفات المدخل لا يدخل هذا العدد.

النطاق مصفوفات عادية غير فارغة من int64 وقيم صحيحة صغيرة منتهية: خطوط بطول من واحد إلى أربعة، أو مصفوفة (2,2). لم نفحص عددًا بلا محاور أو مصفوفة عامة أكبر أو أعلى رتبة.

لم نفحص شرائح أو خطوات سالبة أو غير منتظمة، أو أصنافًا فرعية أو مصفوفات مقنعة أو كائنات خارجية أو أنواعًا أخرى، ولا مشاركة الذاكرة أو التعديل أو تغيير الأعلام. لم نقس الأداء أو نشغّل إصدارًا أقدم.

إذا كان سؤالك عن F وحدها، اقرأ عمود F في هذه التجربة. وإذا قرأت نتيجة isfortran، احفظ معها C أيضًا حتى تفسر الشرط المركب الذي اختبرناه.

المدخلC / Fisfortran
متجه وصف وعمود / FTrue / TrueFalse
مصفوفة (2,2) / FFalse / TrueTrue
مصفوفة (2,2) / CTrue / FalseFalse

للتوسع: ترتيب الفهرسة ونقل المحاور.

المراجع

  1. NumPy isfortran
  2. NumPy 2.3.5 isfortran implementation
  3. NumPy ndarray.flags

أُعدّ هذا المقال بمساعدة الذكاء الاصطناعي، وخضع لمراجعة ذاتية بالأداة نفسها. لا يُنسب إلى مراجع بشري أو خبير مستقل. منهجية المحتوى.