MATLAB等效于Python argmax,具有用户定义对象数组
我有一个数组,如图所示。这里MATLAB等效于Python argmax,具有用户定义对象数组,matlab,class,object,argmax,Matlab,Class,Object,Argmax,我有一个数组,如图所示。这里Bandit是我创建的一个类 bandits = [Bandit(m1),Bandit(m2),Bandit(m3)]; 现在,我想做以下几点。下面是Python代码,它立即为我提供了每个对象的平均值的maxarg j=np.argmax([b.强盗中b的平均值]) 如何在MATLAB中实现同样的功能?为了更加清晰,每个bandit对象都有一个属性mean\u value。也就是说,如果b1是bandit对象,那么我可以使用点运算符(b1.mean_value)获
Bandit
是我创建的一个类
bandits = [Bandit(m1),Bandit(m2),Bandit(m3)];
现在,我想做以下几点。下面是Python代码,它立即为我提供了每个对象的平均值的maxarg
j=np.argmax([b.强盗中b的平均值])
如何在MATLAB中实现同样的功能?为了更加清晰,每个bandit对象都有一个属性
mean\u value
。也就是说,如果b1
是bandit对象,那么我可以使用点运算符(b1.mean_value
)获得该值。我想找出b1
,b2
,b3
中哪一个具有最大的平均值
,并需要获得它的索引。(参见上面的python代码。如果b2
具有最高的mean_val
,那么最后,j
将包含索引2。)将函数应用于数组的每个元素。它将生成一个包含操作结果的新数组。对于此结果,您可以像往常一样应用max
:
[~,arg] = max(arrayfun(@mean,bandits));
请注意,如果您为Bandit
类重载了subsref
或size
方法,则这可能不起作用
编辑: 所以现在我明白了
mean
不是一个函数,而是一个属性。操作x.mean
可以表示为函数调用subsref(x,substruct('.','mean'))
。因此,可以更改上述解决方案,在每个数组元素上调用此函数:
op = @(x)subsref(x,substruct('.','mean'))
[~,arg] = max(arrayfun(op,bandits));
也就是说,我们调用函数mean
,而不是调用函数subsref
,以索引属性mean
如果bandits
是一个简单的结构数组,那么以下操作也可以:
[~,arg] = max([bandits.mean]);
这里,bandits.mean
将为结构数组的每个元素提取mean
值,生成一个逗号分隔的列表。这个列表用方括号表示,形成一个向量。该向量会像往常一样再次输入到max
函数中
我不确定后一种解决方案是否也适用于自定义类。我没有你的
Bandit
类要测试。请让我知道后一种解决方案是否有效,以便我可以用正确的信息更新帖子。matlabcentral上可能存在的副本:一点也不。我的问题更具体。数组包含用户定义类的对象。我想选择平均值(即egLobject1.mean)最大的对象的索引。在Python中,它是一个单行程序。想知道这是怎么做到的吗MATLAB@DavidParks当前位置这不是那个问题的重复。答案只适用于数字数组,而不适用于自定义类型的数组。明白了,感谢您的澄清。为了更清楚,每个bandit对象都有一个属性“mean_value”。也就是说,如果b1是一个bandit对象,那么我可以使用点运算符(b1.mean_value)获得该值。我想找出b1、b2、b3中哪一个的平均值最大,并需要获取它的索引(参见上面的python代码。它在bandits数组中循环。检查b1、b2、b3中哪一个的平均值最大。如果b2的平均值最高,那么最后,j将包含索引2)@user3137598:我已经编辑了答案,我希望更好的解决方案适用于自定义类,但我不知道。否则,可以使用丑陋的解决方案。:)