Is it possible to write methods that iteratively process each element of an objectarray without writing for-loops each time?
1 view (last 30 days)
Show older comments
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.
0 Comments
Accepted Answer
Matt J
on 8 Apr 2021
Edited: Matt J
on 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 Comments
Matt J
on 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
More Answers (0)
See Also
Categories
Find more on Software Development Tools in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!