如何计算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)
文件