2011-01-18 47 views
24

假設我有一個矩陣,如:如何將矩陣的每一行按固定行分開?

100 200 300 400 500 600 
    1 2 3 4 5 6 
10 20 30 40 50 60 
... 

我希望通過第2行(由相應的元素中的每個元素)來劃分的每一行,所以我會得到:

100 100 100 100 100 100 
    1 1 1 1 1 1 
10 10 10 10 10 10 
... 

Hw的能我這樣做(沒有寫明確的循環)?

+0

相似的問題:[我如何劃分矩陣元素在MATLAB中的列總和?](http://stackoverflow.com/q/1773099/97160) – Amro

回答

33

使用bsxfun

outMat = bsxfun (@rdivide, inMat, inMat(2,:)); 

的第一個參數bsxfun的句柄要應用的功能,在這種情況下,正確的劃分。

26

這裏有一對夫婦更等價的方法:

M = [100 200 300 400 500 600 
    1 2 3 4 5 6 
    10 20 30 40 50 60]; 

%# BSXFUN 
MM = bsxfun(@rdivide, M, M(2,:)); 

%# REPMAT 
MM = M ./ repmat(M(2,:),size(M,1),1); 

%# repetition by multiplication 
MM = M ./ (ones(size(M,1),1)*M(2,:)); 

%# FOR-loop 
MM = zeros(size(M)); 
for i=1:size(M,1) 
    MM(i,:) = M(i,:) ./ M(2,:); 
end 

最好的解決辦法是使用BSXFUN(如張貼@Itamar Katz)的一個

+0

(+1)謝謝! –

3

現在,您可以使用array vs matrix operations

這將這樣的伎倆:

mat = [100 200 300 400 500 600 
    1 2 3 4 5 6 
    10 20 30 40 50 60]; 

result = mat ./ mat(2,:) 

這將輸出:

result = 

    100 100 100 100 100 100 
    1  1  1  1  1  1 
    10 10 10 10 10 10 

這將在八度和Matlab工作,因爲R2016b。

+1

它實際上在MATLAB中工作[太](http://stackoverflow.com/a/1773119/52738)。 – gnovice

+0

感謝精確度,編輯。 – Tom

相關問題