Is it possible to write methods that iteratively process each element of an objectarray without writing for-loops each time?

1 visualización (últimos 30 días)
If I have such an objectarray:
classdef ObjectArray
properties
Value
end
methods
function obj = ObjectArray(F)
if nargin ~= 0
m = size(F,1);
n = size(F,2);
obj(m,n) = obj;
for i = 1:m
for j = 1:n
obj(i,j).Value = F;
end
end
end
end
end
end
An instance A is created as:
F = magic(5);
A = ObjectArray(F);
And I would like to calculate the mean, the max, or do whatever calculations based on each obj.Value, then is it possible to write methods without iterations in each of them?
I expect something like this:
function obj = get.mean(obj)
obj.mean = mean(obj.value)
end
but apparently it doesn't work.

Respuesta aceptada

Matt J
Matt J el 8 de Abr. de 2021
Editada: Matt J el 8 de Abr. de 2021
It is not possible in a get.property() method, but it is possible in a normal method.
function meanValues = mean(Objects)
meanValues = arrayfun( @(ob)mean(ob.Value,'all') , Objects);
end
  2 comentarios
zhehao.nkd
zhehao.nkd el 8 de Abr. de 2021
Editada: zhehao.nkd el 8 de Abr. de 2021
Thank you so much! So at least (1) a function handle and (2) arrayfun() is needed, just like how a normal cell object was treated.
Matt J
Matt J el 8 de Abr. de 2021
Thank you so much!
You're quite welcome, but please click "Accept" if this addressed your problem.
So at least (1) a function handle and (2) arrayfun() is needed, just like how a normal cell object was treated.
It is one solution. If obj.values are all matrices of the same size, you could also have done ,
function meanValues = mean(Objects)
meanValues=mean( cat(3,Objects.Values) , [1,2]);
meanValues=reshape(meanValues,size(Objects));
end

Iniciar sesión para comentar.

Más respuestas (0)

Categorías

Más información sobre Software Development Tools en Help Center y File Exchange.

Productos


Versión

R2019a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by