假設我有一個矩陣,如:如何將矩陣的每一行按固定行分開?
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的能我這樣做(沒有寫明確的循環)?
假設我有一個矩陣,如:如何將矩陣的每一行按固定行分開?
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的能我這樣做(沒有寫明確的循環)?
使用bsxfun
:
outMat = bsxfun (@rdivide, inMat, inMat(2,:));
的第一個參數bsxfun
的句柄要應用的功能,在這種情況下,正確的劃分。
這裏有一對夫婦更等價的方法:
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)的一個
(+1)謝謝! –
現在,您可以使用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。
相似的問題:[我如何劃分矩陣元素在MATLAB中的列總和?](http://stackoverflow.com/q/1773099/97160) – Amro