MATLAB实现Python中自定义对象数组的argmax功能方法
在MATLAB中实现类似Python的argmax提取对象属性最大值索引
嘿,这个需求在MATLAB里其实有两种很简洁的实现方式,完全对应你Python代码的功能:
方法一:直接利用对象数组的属性批量访问(最简洁)
因为你创建的bandits是对象数组(不是cell数组),MATLAB支持对对象数组直接批量访问属性,一步就能提取所有mean_value:
% 提取所有bandit对象的mean_value到数值数组 mean_values = [bandits.mean_value]; % 获取最大值对应的索引,~表示忽略最大值本身的输出 [~, j] = max(mean_values);
这个方法和你Python里[b.mean for b in bandits]的逻辑完全一致,然后用max函数的第二个输出参数得到索引,和np.argmax的效果相同。
方法二:用arrayfun遍历提取(更通用,适用于cell数组或复杂逻辑)
如果你的bandits是cell数组(比如bandits = {Bandit(m1), Bandit(m2), Bandit(m3)}),或者需要对属性做额外处理,可以用arrayfun来遍历:
% 遍历每个元素,提取mean_value mean_values = arrayfun(@(b) b.mean_value, bandits); [~, j] = max(mean_values);
这里的匿名函数@(b) b.mean_value会逐个处理bandits里的对象,把属性值收集成数组,后续步骤和方法一一样。
注意点
如果有多个mean_value同为最大值,MATLAB的max会返回第一个出现的索引,这和numpy.argmax的默认行为是一致的。
内容的提问来源于stack exchange,提问作者user3137598
相关产品推荐
相关产品推荐

