[問題] 將迴圈改成矩陣化運算後 速度不可思議 …已回收
如題所述 非常不合理的現象 矩陣竟然會比迴圈運算還久
問題圖解如下:
矩陣 w size為 1001 by 8
Y size為 8 by 128*150
運算 A = w*Y 示意圖如下
其中Y的部分是由150塊 8*128 的矩陣構成
8 128 128 ... 128
┌─┐ ┌──┬──┬────────────────────┬───┐
│ │* │ 1 │ 2 │ ... │150│8
│ │ └──┴──┴────────────────────┴───┘
│ │ <----------- column長度共128*150這麼長 ----------->
1001│ │
│ │
│ │
│ │
└─┘
乘起來會變成 1001 by 128*150的矩陣 A
然而 A 還有另一種做法 就是使用迴圈 如下
for i=1:150
8 128
┌─┐ ┌──┐
│ │* │ i │8
│ │ └──┘
│ │ =>傳給 A(:,(i-1)*P+1:i*P)
1001│ │
│ │
│ │
│ │
└─┘
end
而這個迴圈運算的速度竟然會比第一種還快2倍左右 這是一個相當大的速度差距
感覺很反常
兩種方法的運算量是一樣的吧?? 然後矩陣化竟然會比迴圈法還慢...??
請問這問題出在哪裡? 還是說 很正常..
程式碼如下
clc;
clear;
%參數設定及預先開出存放適當大小記憶體的變數(始)
trial=1001;
K=8;
N=1024;
P=N/K;
BLK=150;
w=zeros(trial,K);
Y=zeros(K,P*BLK);
A=zeros(trial,P*BLK);
%參數設定及預先開出存放適當大小記憶體的變數(末)
%隨機產生2個要運算的矩陣(始)
w=rand(trial,K);
for i=1:BLK
Y(:,(i-1)*P+1:i*P) =rand(K,P);
end
%隨機產生2個要運算的矩陣(末)
%矩陣化 (始)
tic
A=w*Y;
toc
%矩陣化 (末)
%迴圈法 (始)
tic
for i=1:BLK
A(:,(i-1)*P+1:i*P)=w*Y(:,(i-1)*P+1:i*P);
end
toc
%迴圈法 (末)
謝謝
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 218.34.35.136
→
09/10 22:39, , 1F
09/10 22:39, 1F
※ 編輯: iblind 來自: 218.34.35.136 (09/10 22:59)
→
09/10 23:01, , 2F
09/10 23:01, 2F
→
09/11 04:38, , 3F
09/11 04:38, 3F
推
09/11 13:07, , 4F
09/11 13:07, 4F
討論串 (同標題文章)
以下文章回應了本文:
完整討論串 (本文為第 1 之 2 篇):
MATLAB 近期熱門文章
PTT數位生活區 即時熱門文章