كيف تحسب فقط قطري منتج المصفوفة في أوكتاف؟
-
21-09-2019 - |
سؤال
هل هناك طريقة في أوكتاف لحساب وتخزين فقط قطري منتج المصفوفة؟
في الأساس مثل القيام: vector = diag(A*B);
لا يهمني أي من قيم A*B
باستثناء تلك الموجودة على القطري. أحجام المصفوفة موجودة 80k x 12
و 12 x 80k
, ، لذلك حتى لو لم أهتم بالسرعة/الذاكرة الإضافية ، فلن تتناسب ببساطة في ذاكرة الوصول العشوائي.
غريب ، نظرًا لأن Octave عبارة عن حزمة لمجموعات البيانات الضخمة والقطريات مهمة للغاية ، لذلك يجب أن يكون ذلك ممكنًا.
المحلول
العنصر الأول في القطري هو المنتج القياسي للصف الأول من A مع العمود الأول من B. العنصر الثاني في القطري هو المنتج القياسي للصف الثاني من A مع العمود الثاني من B.
بعبارات أخرى:
vector = sum(A.*B',2);
نصائح أخرى
هذه هي الطريقة التي يمكنك بها القيام بذلك في MATLAB (ربما تشبه بناء جملة Octave):
vector = sum(A.*B',2);
هذا سيحسب فقط قطري الناتج عن العملية A*B
كمتجهات عمود vector
.
في الواقع ، أعتقد أنه منتج DOT للصف الأول من A مع الأول عمودي من B ... العنصر القطري الثاني هو المنتج النقطي للصف الثاني والعمود الثاني ... إلخ