如何计算矩阵中给定值的元素数?

Nik*_*lin 72 matlab count matrix

有谁知道如何计算值出现在矩阵中的次数?

例如,如果我有一个1500 x 1矩阵M(向量)存储工作日的值(1 - 7),我怎么能计算星期日(1),星期一(2),...,星期六(7)的数量存储在M

aio*_*obe 97

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

或者,要计算出现次数5,只需这样做

sum(your_matrix == 5)
Run Code Online (Sandbox Code Playgroud)

  • @AlexB.适用于任意尺寸矩阵的适当扩展将是"sum(your_matrix(:) == 5)` (8认同)

Amr*_*mro 73

这里列出了我可以想到的计算独特元素的所有方法:

M = randi([1 7], [1500 1]);
Run Code Online (Sandbox Code Playgroud)

选项1:制表

t = tabulate(M);
counts1 = t(t(:,2)~=0, 2);
Run Code Online (Sandbox Code Playgroud)

选项2:hist/histc

counts2_1 = hist( M, numel(unique(M)) );
counts2_2 = histc( M, unique(M) );
Run Code Online (Sandbox Code Playgroud)

选项3:accumarray

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

选项4:排序/差异

[MM idx] = unique( sort(M) );
counts4 = diff([0;idx]);
Run Code Online (Sandbox Code Playgroud)

选项5:arrayfun

counts5 = arrayfun( @(x)sum(M==x), unique(M) );
Run Code Online (Sandbox Code Playgroud)

选项6:bsxfun

counts6 = sum( bsxfun(@eq, M, unique(M)') )';
Run Code Online (Sandbox Code Playgroud)

选项7:稀疏

counts7 = full(sparse(M,1,1));
Run Code Online (Sandbox Code Playgroud)

  • 我更喜欢这个链接到mathworks的答案,因为它非常清晰且独立. (4认同)
  • 第二个选项是我正在寻找的,谢谢! (2认同)

gno*_*ice 10

您可以同时对所有值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
Run Code Online (Sandbox Code Playgroud)


小智 5

假设w包含周数([1:7])

n = histc(M,w)
Run Code Online (Sandbox Code Playgroud)

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

n = histc(M,unique(M))
Run Code Online (Sandbox Code Playgroud)

它就像一个SQL Group by命令!