2013-06-03 76 views
2

我看到這個other question,但他只在一個索引上運行。我需要對列和行索引進行操作,而不使用for循環。 有沒有辦法做到這一點:MATLAB - 直接使用矩陣的索引而不使用循環

讓M(a,b)是矩陣和大小是括號中的一個。我想操縱每個元素爲exp((MN)^ 2)

+5

是的,有很多方法。但是,如果沒有你更明確地表達你想要做什麼並展示你的原型代碼,那麼最接近你將得到的答案就是本評論中的第一句話。 –

+0

好的。設M(a,b)爲矩陣,大小爲括號內的一個。我想操縱每個元素exp((m-n)^ 2)。 – SPRajagopal

+0

完成,完成,完成。 – SPRajagopal

回答

7

使用bsxfun

M = exp(bsxfun(@minus, (1:a)', 1:b).^2); 
+0

這實際上是一個非常棒的命令。我正在使用它,它使事情變得更容易。 – SPRajagopal

3

using bsxfun的替代,在這裏,將使用meshgrid

>> a = 5; b = 4; % Some example dimensions 
>> [n, m] = meshgrid(1:b, 1:a) 

n = 

    1  2  3  4 
    1  2  3  4 
    1  2  3  4 
    1  2  3  4 
    1  2  3  4 


m = 

    1  1  1  1 
    2  2  2  2 
    3  3  3  3 
    4  4  4  4 
    5  5  5  5 

>> M = exp((m - n).^2); 

注意,這示例主要是指導性的而不是實際的 - bsxfun解決方案更快,消耗的內存更少 - 但這顯示瞭如何生成矩陣子矩陣cripts。

+0

+1,儘管內存佔用對於較大的'a'和/或'b'變得過於禁忌。 –

+0

@RodyOldenhuis,哦,沒有想到這一點。 – SPRajagopal

+0

這比'bsxfun'慢,並消耗更多的內存。只是在說'。 –

相關問題