所以子集內計數的值出現,設定一個矩陣,像這樣:使用SUM和獨特的矩陣
20 2
20 2
30 2
30 1
40 1
40 1
我想算1時的第1列的每個唯一值的次數。我可以通過[sum(x(1:2,2)== 1)]爲每個值做很長的路,但我認爲這將是UNIQUE函數的完美用法。我怎麼能解決這個問題,使我能得到的輸出是這樣的:如果
20 0
30 1
40 2
對不起的解決方案似乎很明顯,我的迴路的把握是非常差的。
所以子集內計數的值出現,設定一個矩陣,像這樣:使用SUM和獨特的矩陣
20 2
20 2
30 2
30 1
40 1
40 1
我想算1時的第1列的每個唯一值的次數。我可以通過[sum(x(1:2,2)== 1)]爲每個值做很長的路,但我認爲這將是UNIQUE函數的完美用法。我怎麼能解決這個問題,使我能得到的輸出是這樣的:如果
20 0
30 1
40 2
對不起的解決方案似乎很明顯,我的迴路的把握是非常差的。
事實上唯一的一個很好的選擇:
u=unique(x(:,1))
res=arrayfun(@(y)length(x(x(:,1)==y & x(:,2)==1)),u)
拆開最後一行:
@(y)length(x(x(:,1)==y & x(:,2)==1))
,它可以找到條件爲x(:,1)==y & x(:,2)==1)
的x部分的長度(稱爲邏輯索引)。因此,對於每個獨特元素,它會找到X中的行,其中第一個是唯一元素,第二個是1。試試這個(在this answer指定):
>>> [c,~,d] = unique(a(a(:,2)==1))
c =
30
40
d =
1
3
>>> counts = accumarray(d(:),1,[],@sum)
counts =
1
2
>>> res = [c,counts]
這很好用,謝謝。閱讀「幫助」條目並不能幫助我理解這個論證的工作原理。你會好好解釋一下嗎? – luser 2012-03-20 16:29:39