code returns multiple "ans" instead of array
Show older comments
im trying to write a code to perfom a simple moving average on a input array but the output give multiple ans' instead of one array.
function avrgdata = Movingaverage(data,windsz)
n = [zeros(1,windsz-1),data];
avrgdata = zeros(length(data));
for i=1:length(data)
avrgdata(1,i)= (sum(n(i:i+windsz-1)))/windsz;
end
8 Comments
Adam
on 25 Oct 2019
What is the purpose of this:
avrgdata=preavrgdata;
You declared preavrgdata correctly to store results in a loop via indexing, but this line would just assign the final element of the loop to the variable you actually return (which should still just be a single answer, though not what you want).
Why can't you just return preavrgdata instead?
Also the 'return' command is redundant.
Guillaume
on 25 Oct 2019
To add to Adam's comment, what is this meant to be doing:
for i=1:size(data):1
The size(data) increment (which is a vector) is most likely a bug. In any case, this loop will only iterate once since it starts and ends at 1.
Why can't you use movmean to calculate a moving average?
Oluremi Falowo
on 25 Oct 2019
Oluremi Falowo
on 25 Oct 2019
Oluremi Falowo
on 25 Oct 2019
You have not answered my first question. Your for still doesn't make any sense.
Also, please use the
button to format your code in your posts.
button to format your code in your posts.I'm not convinced that your zeros([1,size(data)]) makes sense either. It's going to create a 3D matrix.
Oluremi Falowo
on 25 Oct 2019
Guillaume
on 25 Oct 2019
If it's a class on convolution, aren't you supposed to use a convolution to calculate the moving average then?
Answers (1)
KALYAN ACHARJYA
on 25 Oct 2019
Edited: KALYAN ACHARJYA
on 25 Oct 2019
i have been asked to not use an preexisting fucntions to do it
Here I have used some basic functions only, may be allow, the following exampe better illustrates you regarding the average sum of segment of array data. Please note that the length of the data and window size is perfectly divisible, other wise we have do certains considerations or handling the remains extra elements
data=rand(1,30); % Just for example
wind_size=3; % If w size is 3, it means the result arrat will be length of length(data)/3
avrgdata=zeros(1,length(data)/3);
for i=1:length(avrgdata)
avrgdata(i)=sum(data(i:i+2))/wind_size;
end
avrgdata
2 Comments
Oluremi Falowo
on 25 Oct 2019
KALYAN ACHARJYA
on 25 Oct 2019
Edited: KALYAN ACHARJYA
on 25 Oct 2019
Yes, multiple ways, averaging can done in arrays? Then is this?
data=rand(1,30); % Just for example
wind_size=3; % If w size is 3, it means the result arrat will be length of length(data)/3
avrgdata=zeros(1,length(data));
for i=1:length(avrgdata)-2
avrgdata(i)=sum(data(i:i+2))/wind_size;
end
avrgdata
How you going to handle boundary elements? Is zero padding or??
For example
data=[2 3 4 5 6 7]
What would be answer as per your calculation?
Categories
Find more on Logical 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!