因此,假设矩阵如下:
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)
拆开最后一行:
- arrayfun(fun,array) 将 fun 应用于数组中的每个元素,并将其放入一个新数组中并返回。
- 这个函数是函数
@(y)length(x(x(:,1)==y & x(:,2)==1))
条件x(:,1)==y & x(:,2)==1)
成立的 x 部分(称为逻辑索引)。因此,对于每个唯一元素,它会在 X 中找到第一个是唯一元素,第二个是一个的行。
关于matlab - 使用 SUM 和 UNIQUE 计算矩阵子集中值的出现次数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9790015/