You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 12:46:02