2010-02-20 76 views
13

Có cách nào trong Octave tính toán và chỉ lưu trữ đường chéo của sản phẩm ma trận không?Làm cách nào để tính toán đường chéo của sản phẩm ma trận trong Octave?

Về cơ bản như thực hiện: vector = diag(A*B);

Tôi không quan tâm đến bất kỳ giá trị của A*B trừ những người trên đường chéo. Các kích thước ma trận là khoảng 80k x 1212 x 80k, vì vậy ngay cả khi tôi không quan tâm về tốc độ/bộ nhớ thêm nó chỉ đơn giản là không phù hợp với RAM.

Lạ lùng, vì Octave là một gói cho tập hợp dữ liệu khổng lồ và đường chéo là rất quan trọng, do đó, nó sẽ là có thể.

Trả lời

17

Phần tử đầu tiên trong đường chéo là sản phẩm vô hướng của hàng đầu tiên của A với cột đầu tiên của B. Phần tử thứ hai trong đường chéo là sản phẩm vô hướng của hàng thứ hai của A có cột thứ hai của B.

Nói cách khác:

vector = sum(A.*B',2); 
+1

Tôi thấy bạn đã tận dụng tốt thời gian gia hạn 5 phút để chỉnh sửa. ;) – gnovice

+0

Tôi rất vui vì thời gian gia hạn tồn tại. Tôi dường như chỉ nhìn thấy những sai lầm chính của tôi một khi tôi nhấn gửi. :) – Jonas

9

Đây là cách bạn có thể làm điều đó trong MATLAB (có thể tương tự như cú pháp Octave):

vector = sum(A.*B',2); 

này sẽ chỉ tính đường chéo kết quả của hoạt động A*B dưới dạng vectơ cột vector.

0

thực sự tôi nghĩ rằng đó là dấu chấm sản phẩm của hàng đầu tiên của A với cột đầu tiên của B ... các yếu tố đường chéo thứ hai là chấm sản phẩm của hàng thứ hai và cột thứ hai ... vv

+0

Đúng. Tôi nhầm lẫn. – Jonas

Các vấn đề liên quan