[問題] 將迴圈改成矩陣化運算後 速度不可思議 …已回收
如題所述  非常不合理的現象  矩陣竟然會比迴圈運算還久
問題圖解如下:
矩陣 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數位生活區 即時熱門文章