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

2 Ansichten (letzte 30 Tage)
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.

Akzeptierte Antwort

Matt J
Matt J am 8 Apr. 2021
Bearbeitet: Matt J am 8 Apr. 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 Kommentare
zhehao.nkd
zhehao.nkd am 8 Apr. 2021
Bearbeitet: zhehao.nkd am 8 Apr. 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 am 8 Apr. 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

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Kategorien

Mehr zu Software Development Tools finden Sie in Help Center und File Exchange

Produkte


Version

R2019a

Community Treasure Hunt

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

Start Hunting!

Translated by