Numpy: غير تقليدي vstack

تم إنشاؤها على ٢٢ يوليو ٢٠٢٠  ·  7تعليقات  ·  مصدر: numpy/numpy

من مستندات vstack :

التوقيع: hstack(tup)
Docstring:
تكديس المصفوفات في تسلسل أفقيًا (حسب العمود).

هذا يعادل التسلسل على طول المحور الثاني ، باستثناء 1-D
المصفوفات حيث يتم ربطها على طول المحور الأول.

سؤالي لماذا الاستثناء ؟؟؟
لدينا بالفعل concatenate() .

مثال على إعادة إنتاج الكود:

v = rand(5)
concatenate((v, v)).shape
(10,)

hstack((v, v)).shape
(10,)

stack((v, v), axis=1).shape
(5, 2)

vstack((v, v)).shape
(2, 5)

stack((v, v), axis=0).shape
(2, 5)

سيكون من المنطقي أكثر أن يكون لديك vstack = stack(axis=1) .

33 - Question

ال 7 كومينتر

نحن لا نشجع hstack / vstack / dstack ، ونشجع على وجه التحديد np.stack بدلاً من ذلك. ومع ذلك ، فإن الاختلاف هو إذا قمت بتمرير مصفوفة ثنائية الأبعاد. بعض وظائف المكدس تدخل أبعادًا جديدة (لبعض التجسيدات) ، أعتقد أن hstack لا يفعل ذلك.

إضافة جملة أخيرة تفيد بأن إما np.concatenate أو np.stack هي واجهة برمجة التطبيقات المفضلة (عادةً) سيكون أمرًا جيدًا ، لكن لا أعتقد أن لدينا تطلعات حقيقية في حذف الوظائف.

سؤالي _لماذا الاستثناء _ ؟؟؟

فقط لأن seberg لم يرد مباشرة على هذا:

  • اعتقد شخص ما منذ فترة طويلة أنها كانت فكرة جيدة
  • الآن فات الأوان لتغييره دون كسر الجميع

يتم التعامل مع المصفوفات 1D بشكل عام على أنها "أفقية" في شكل متكتل بدلاً من "عمودي". على سبيل المثال ، عند بث مصفوفة (N, N) 2D بمصفوفة (N,) 1D ، يتم بث المصفوفة 1D إلى (1, N) ، وليس (N, 1) . hstack()/vstack()/dstack() حول مفاهيم المحاور الثابتة (يمكنك استخدام stack() إذا كنت تريد ذلك) ولكن مفاهيم "الأفقي / الرأسي / العمق" التي لا يتم تعيينها بدقة على محاور ثابتة لـ كل أبعاد الصفيف.

أنا -1 في اللغة التي لا تشجع hstack()/vstack()/dstack() ، في حد ذاتها. لا زلت أعتقد أنها جيدة ومفيدة بسبب الاستثناءات في دلالاتها. يلتقطون المفاهيم التي لم يتم التقاطها بإيجاز بواسطة stack() .

على سبيل المثال ، هناك حاجة شائعة لإلحاق قيمة عددية مسبقًا أو إلحاقها بمصفوفة 1D. np.hstack([0.0, some_vector]) يعمل بشكل رائع لهذا الغرض. np.stack([0.0, some_vector]) و np.concatenate([0.0, some_vector]) balk لأنهما لا يمتلكان نفس الأبعاد.

صحيح أن هذه الأدوات مرتبطة قليلاً بالعمل في سياق معين على ما أعتقد. لذلك دعونا فقط نغلق هذا. لدينا الأدوات العامة بدون سلوك "غير تقليدي" ، والأدوات الأخرى موجودة لتبقى عندما تكون أدوات مساعدة جيدة.

rkern ، ثم concatenate يحتاج إلى إصلاح ، IMHO. التكديس يعني التسلسل بعد إضافة خافت إضافي ، والذي لا يتم احترامه هنا. لكن حسنا…

seberg ، يبدو أن تحذير الإيقاف سيكون موضع ترحيب هنا. المصفوفة 1D ليست أفقية ولا رأسية. و hstack يعود إلى concatenate ، متناسيًا إضافة بُعد إضافي. هذا في الواقع يبدو "غير تقليدي". ولكن إذا لم تكن على وشك المناقشة ، حسنًا ...

تضيف جميع وظائف ?stack أيضًا تعتيمًا إضافيًا فقط عندما تكون التعتيم أقل مما هو مطلوب للقيام بالعملية الآن. في هذه الحالة يشمل ذلك 0d فقط.

Atcold أنا منفتح للحصول على اقتراحات لدفع المستخدمين إلى stack ، ولكن ربما في حدود عدم إخافتهم بنشاط من استخدام هذه الوظائف.

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات