Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MATLAB等效于Python argmax,具有用户定义对象数组_Matlab_Class_Object_Argmax - Fatal编程技术网

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:我已经编辑了答案,我希望更好的解决方案适用于自定义类,但我不知道。否则,可以使用丑陋的解决方案。:)