[問題] ind2sub 和 sub2ind如何用已回收

看板MATLAB作者 (笨笨的)時間15年前 (2010/07/11 21:06), 編輯推噓4(402)
留言6則, 3人參與, 最新討論串1/1
請教各位高手 小弟是新手 我有兩個mxn陣列A,B 要作個別值相除的動作(A./B) 但是這兩陣列中有0值 (其兩陣列0值 對應到相同的index, ex:A=[1,2,3;0,5,6], B=[7,8,9;0,10,11]) 我想要作值相除 但是想要跳過0/0 (不然會出現Warning:Divide by zero 大量的話運算速度會降低) 我想到的方法: 事先個別將A,B中非0的index記入下來 然後個別將A,B都轉到一維,假設C,D 再用C(find(C~=0))./D(find(D~=0))作值相除的動作 最後在將其轉回mxn陣列 小弟不太懂要如何寫 只知道會用到ind2sub和sub2ind 來記下維度的index 煩請各位高手回覆 拜託各位高手 非常謝謝您 請您指教 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 211.76.175.169

07/11 23:49, , 1F
你都已經有缺項了 最後怎麼再轉回mxn ?
07/11 23:49, 1F
回p大 或許我的想法有錯誤 我只是想要避免出現warning 大量warning出現 速度變很慢 感謝您的指教 我是有想到: For i=1:3 For j=1:3 If B(i,j)~=0 C(i,j)=A(i,j)/B(i,j) end end end 不過這樣只是迴圈 而不算矩陣運算 速度反而更慢 請問有更好的方法嗎 再一次感謝各位高手的回覆 ※ 編輯: yaohwei 來自: 211.76.175.169 (07/12 13:31)

07/12 14:30, , 2F
C = A./B ; C(isnan(C)) = 0;
07/12 14:30, 2F
回n大 感謝您 我剛剛試過了 不過會在C=A./B這行中出現warning:Divide by zero 小弟是想避免出現此warning 因為我目前是作simulation階段 在command window中會重複顯示很多次 速度會變慢 所以小弟才要避免掉 再一次感謝n大的回覆 ※ 編輯: yaohwei 來自: 211.76.175.169 (07/12 15:15)

07/12 15:41, , 3F
C=zeros(size(B)); P=B~=0; C(P)=A(P)./B(P);
07/12 15:41, 3F

07/12 15:41, , 4F
不能除的地方直接給0了 要別的數值要自己處理
07/12 15:41, 4F
成功了 非常感謝P大您的幫助 減少1/5的計算時間 ※ 編輯: yaohwei 來自: 211.76.175.169 (07/12 16:28)

07/12 18:14, , 5F
不要出現warning,就先打個warning off
07/12 18:14, 5F

07/13 21:56, , 6F
B(B==0) = inf; C = A./B ;
07/13 21:56, 6F
非常謝謝n大的回覆 ※ 編輯: yaohwei 來自: 211.76.175.169 (07/14 11:00)
文章代碼(AID): #1CES6xRz (MATLAB)