2017-04-25 129 views
3

在MATLAB中,給定矩陣A,我想創建一個矩陣B,其中包含矩陣A的元素作爲第一列元素的百分比。下面的代碼是這樣做的:向量化MATLAB中的for循環

A = randi(5,6); 

B = zeros(size(A,1), size(A,2)); 
for kk = 1:size(A,2) 
    B(:,kk) = (A(:,kk).*100)./ A(:,1)-100; 
end 

但是,我怎麼能通過矢量化在單行中實現相同的結果呢? arrayfun會在這件事上有用嗎?

+2

了'ii'沒有做任何事情,所以你可以將整個外環矩陣由第一列。 – beaker

+0

@beaker我剛剛編輯了這個問題,使其更清晰 – AJMA

回答

5

使用bsxfun在這種情況下:

B = bsxfun(@rdivide, 100 * A, A(:, 1)) - 100; 

你的代碼做的是把你的矩陣A的每一列,並通過它的第一列分割。您正在進行一些額外的縮放,例如在分割之前將所有列乘以100,然後再減去。 bsxfun內部執行廣播,這意味着它會暫時創建一個新的矩陣,將第一列與第A列中的第一列一起復制並執行元素方式的分割。您可以通過預先縮放矩陣100來完成邏輯,然後減去100。

利用MATLAB R2016b,沒有必要爲bsxfun,您可以用算術運算本身做到這一點:

B = (100 * A) ./ A(:,1) - 100;