Is it possible to write methods that iteratively process each element of an objectarray without writing for-loops each time?
조회 수: 2 (최근 30일)
이전 댓글 표시
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
채택된 답변
Matt J
2021년 4월 8일
편집: Matt J
2021년 4월 8일
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
Matt J
2021년 4월 8일
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
추가 답변 (0개)
참고 항목
카테고리
Help Center 및 File Exchange에서 Construct and Work with Object Arrays에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!