سؤال

هل هناك طريقة في أوكتاف لحساب وتخزين فقط قطري منتج المصفوفة؟

في الأساس مثل القيام: 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 ... العنصر القطري الثاني هو المنتج النقطي للصف الثاني والعمود الثاني ... إلخ

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top