matlab - number of occurrences in matrix
我在Matlab中有(n x n)个矩阵。例如(n = 3):
我想计算前n个数字的出现次数(并创建矩阵B)。
输出:
谢谢。
- 如果是A=[1,2; 3,1],那么您是B=[2,1]还是B=[1,1]?也就是说,您是在该列中还是整个表格中进行计数?
使用bsxfun和sum可以非常优雅地完成此操作。
1
| sum (bsxfun (@eq, A (1:n ), A (: ))) |
但是,我认为您的示例是错误的。在您的示例矩阵
前3个元素不是[1 2 3]而是[1 4 1],因为在Matlab中,元素按列优先顺序排列。如果要检查第一行中的前n个元素,则应该执行以下操作:
1
| sum (bsxfun (@eq, A (1, 1:n ), A (: ))) |
这可以通过ismember:
完成
-
这将返回B = [2 1 6]。
-
我现在看到的@MohsenNosratinia,使用直方图可能不太实用。已将方法更改为ismember。
这应该可以解决问题:
-
尽管提到了使用length的矩阵为nxn,但通常会提出问题。在这种情况下,我会选择类似size(A,2)的东西来替换length(A)。
-
那是正确的。 length(A(:,1))也将起作用,仅指定尺寸2的长度。
-
如果性能是问题,则可以用sum代替length(find。
如果有stat工具箱,则可以使用tabulate(文档),否则使用countmember(matlab交换)。
- 假设有人需要类似tabulate(A(ismember(A,A(:,1))))的东西来将其限制为第一行值。