[討論] 求兩兩數據的差值已回收

看板MATLAB作者時間14年前 (2011/07/11 11:37), 編輯推噓2(205)
留言7則, 4人參與, 最新討論串1/1
如題,如果有一個1*m的陣列A,我想求其中任兩個元素的差值之絕對值, 最簡單的應該就是用兩層迴圈去跑,但是因為陣列A比較大,所以跑起來很慢。 目前寫法: B = zeros([1,(1+m)*m/2]); idx = 1; for i = 1:m-1 for j = 2:m B(idx) = abs(A(i)-A(j)); idx = idx + 1; end end 例如:A = [1 2 3 4]; 則結果應為B = [1 2 3 1 2 1]; 想請問matlab有內建的函式可以做到這件事嗎? 如果沒有的話,請問有沒有比較有效率的寫法呢? -- 家家是家,到家才是家~道道是道,放下見大道 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.112.27.132

07/11 15:39, , 1F
bsxfun
07/11 15:39, 1F

07/11 16:36, , 2F
請問樓上願意利用上面的例子簡單說明bsxfun要怎麼寫嗎?
07/11 16:36, 2F

07/11 16:37, , 3F
我看了bsxfun的說明,不太能理解之間的關連性耶
07/11 16:37, 3F

07/11 22:22, , 4F
B=[A' zeros(size(A'))];pdist(B)
07/11 22:22, 4F

07/11 22:23, , 5F
上面打錯。 B=[A' zeros(size(A))'];pdist(B)
07/11 22:23, 5F

07/11 23:31, , 6F
B=abs(bsxfun(@plus,A,-A'));
07/11 23:31, 6F

07/13 23:50, , 7F
謝謝樓上的指教,問題解決了,真的快多了
07/13 23:50, 7F
文章代碼(AID): #1E6c_T74 (MATLAB)