[問題] 統計陣列元素個數

看板MATLAB作者 (布丁女孩)時間14年前 (2011/12/14 21:09), 編輯推噓6(609)
留言15則, 2人參與, 最新討論串1/1
我有a,b兩個大小相同矩陣 想統計a矩陣中元素出現的次數 但是不是出現一次加一次 是依照b矩陣中相對應位置的元素當作出現次數 ex. a=[1 2 1 b=[3 2 1 2 1 1 5 1 1 1 1 1] 2 2 2] 1:3+1+1+1+2+2+2=12次 2:2+5=7次 a的元素是正浮點數 但實際多少要依輸入資料而定 b的元素是0~1之間浮點數 想請問這要怎麼做? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 203.64.91.30

12/14 21:53, , 1F
1:sum(sum((a==1).*b)) 2:sum(sum((a==2).*b))
12/14 21:53, 1F

12/14 21:55, , 2F
1:sum(sum(b(a==1))) 2:sum(sum(b(a==2)))
12/14 21:55, 2F

12/14 21:55, , 3F
兩種方法
12/14 21:55, 3F
喔喔!! 可是那是舉例 現實的a我沒辦法用==這種方式寫 因為a元素是浮點數 值的範圍很大 個數也很多 768*1024個 也可能完全沒重複 所以b也是這麼多個0.00001~1.00000的浮點數 這樣的話有比較好的寫法嗎?

12/15 01:49, , 4F
把==改成>和<如何?
12/15 01:49, 4F
如果我是要寫多少數量在區間內的話應該是可以這樣寫 把0~1分五個區間 0~0.2 0.2~0.4...分開統計 如果說要精確統計的話呢?

12/15 02:03, , 5F
那可能你要設定一個精度 abs(a-1) < tol 接近1的範圍
12/15 02:03, 5F
這個我不知道什麼意思耶... 可以再說明一下嗎? 感謝

12/15 16:27, , 6F
針對你的問題 1.00001 0.99999 都視為1的話
12/15 16:27, 6F

12/15 16:30, , 7F
所以abs(a-1)<0.0001 會是true
12/15 16:30, 7F

12/15 16:31, , 8F
0.0001是你的精度
12/15 16:31, 8F
我有一個想法不知道可不可行 就是我將a當作index去sort b 用一個新的陣列裝 c=[a b a b a b ....] 然後判斷a是否相同再累加b 這樣是可行的嗎? 不過我還是不太清楚這要怎麼寫就是了XD

12/16 18:59, , 9F
那用我在1 2樓PO的方法還比較省事
12/16 18:59, 9F

12/16 18:59, , 10F
所以你現在還有什麼問題?
12/16 18:59, 10F
我用我後來這個方法寫完了 只是我還是不了解你的方法 囧 我是這樣寫 麻煩請你幫我看看有沒有問題 L_1d=L(:); NG_1d=Nor_Gau(:); [sort_L, id]=sort(L_1d); num=prod(size(sort_L)); tmpS=[]; tmpS(1,1)=sort_L(1); tmpS(1,2)=0; tmp=sort_L(1); j=1; for i=2:num if sort_L(i)==tmp tmpS(j,2)=tmpS(j,2)+NG_1d(id(i)); elseif sort_L(i)~=tmp j=j+1; tmpS(j,1)=sort_L(i); tmpS(j,2)=NG_1d(id(i)); tmp=sort_L(i); end end

12/16 20:40, , 11F
看來沒什麼問題 不過你說過L可能是浮點數不能用==判斷
12/16 20:40, 11F

12/16 20:41, , 12F
所以我才說了可以改成 abs(sort_L(i)-tmp)<0.0001
12/16 20:41, 12F

12/16 20:44, , 13F
0.0001 改越小代表精度越高
12/16 20:44, 13F
我大概明白你的意思了 總覺得我的方法不夠直覺... 程式碼可能也還有簡化的空間吧 寫了好大一串 不知道哪裡還可以優化 感謝你的指導!! ※ 編輯: cashpaggy 來自: 203.64.91.30 (12/17 00:45)

12/17 01:42, , 14F
要優化加速就是1 2樓的方法了
12/17 01:42, 14F

12/17 01:43, , 15F
若你資料量很大 for迴圈會很慢很慢
12/17 01:43, 15F
文章代碼(AID): #1Ew9_m3w (MATLAB)
文章代碼(AID): #1Ew9_m3w (MATLAB)