如何在Octave中使用cellfun获取众数出现次数并完成计算
在Octave中计算元胞数组各元胞的众数出现占比
要实现你需要的计算,核心是在cellfun的匿名函数中捕获mode函数的第二个输出参数(众数出现次数f),再将其除以对应元胞数组的长度。以下是两种可行的实现方式:
方法1:显式捕获mode的输出参数
这种写法直观易懂,适合快速理解逻辑:
% 定义示例元胞数组 A = {[1 2 3 1 1], [1 1 1 1]}; % 使用cellfun遍历每个元胞,计算众数占比 result_cell = cellfun(@(x) { [~, f] = mode(x); % 忽略众数值,捕获出现次数f f / length(x); % 计算占比 }, A); % 将结果元胞数组转为数值数组(按需选择) result = cell2mat(result_cell);
运行后result的值为[0.6, 1],完全符合预期。
方法2:用nthargout简化写法
Octave的nthargout函数可以直接获取指定函数的第N个输出,用它可以把代码压缩为一行:
A = {[1 2 3 1 1], [1 1 1 1]}; result = cellfun(@(x) nthargout(2, @mode, x) / length(x), A);
这里nthargout(2, @mode, x)的作用是调用mode(x)并返回它的第二个输出(即众数出现次数f),后续直接完成除法计算即可。
关键说明
- Octave中
mode函数的多输出格式为[m, f, c] = mode(x),其中:m:数组的众数值f:众数的出现次数c:众数在数组中的位置索引
- 因为我们只需要
f,所以用~忽略不需要的输出参数,或者用nthargout直接提取目标输出。
内容的提问来源于stack exchange,提问作者Lucia
相关产品推荐
相关产品推荐

