如何计算matrix中给定值的元素数量?

有谁知道如何计算一个值出现在matrix中的次数?

例如,如果我有一个存储平日(1 – 7)值的1500 x 1matrixM (vector),我怎样才能算出多less个星期天(1),星期一(2),…,星期六(7 )是否存储在M

看看确定和计算数组的唯一值 。

或者,要计算出现5的次数,简单地做

 sum(your_matrix == 5) 

以下列出了我可以用来计算独特元素的所有方法:

 M = randi([1 7], [1500 1]); 

选项1:制表

 t = tabulate(M); counts1 = t(t(:,2)~=0, 2); 

选项2:hist / histc

 counts2_1 = hist( M, numel(unique(M)) ); counts2_2 = histc( M, unique(M) ); 

scheme3:准确的

 counts3 = accumarray(M, ones(size(M)), [], @sum); %# or simply: accumarray(M, 1); 

选项4:分类/差异

 [MM idx] = unique( sort(M) ); counts4 = diff([0;idx]); 

选项5:arrayfun

 counts5 = arrayfun( @(x)sum(M==x), unique(M) ); 

选项6:bsxfun

 counts6 = sum( bsxfun(@eq, M, unique(M)') )'; 

选项7:稀疏

 counts7 = full(sparse(M,1,1)); 

您可以一次对所有值1至7执行此操作的一种方法是使用ACCUMARRAY函数:

 >> M = randi(7,1500,1); %# Some random sample data with the values 1 through 7 >> dayCounts = accumarray(M,1) %# Will return a 7-by-1 vector dayCounts = 218 %# Number of Sundays 200 %# Number of Mondays 213 %# Number of Tuesdays 220 %# Number of Wednesdays 234 %# Number of Thursdays 219 %# Number of Fridays 196 %# Number of Saturdays 

假设w包含星期编号([1:7])

 n = histc(M,w) 

如果你不知道M中的数字范围:

 n = histc(M,unique(M)) 

它就像一个SQL组通过命令!

这将是完美的原因,我们正在matrix操作,答案应该是一个单一的数字

 sum(sum(matrix==value)) 

这是一个很好的函数文件在Matlab中央文件交换。

countmember.m链接

这个function文件是完全vector化的,因此很快。 另外,与aioobe的答案中提到的函数相比,这个函数不使用准确的函数,这就是为什么这个函数甚至可以和老版本的Matlab兼容。 此外,它适用于单元arrays以及数值数组。

解决scheme:您可以将此function与内置的matlab函数“unique”结合使用。

居民count = countmember(唯一(M),M)

这个数组是一个与唯一的(M)具有相同大小的数值数组,并且这个不同的值将会对应于唯一的(M)中相应的值的计数(相同的索引)。

使用nnz而不是sum。 没有必要双重调用折叠matrix向量,它可能比总和快。

 nnz(your_matrix == 5) 

文件