code returns multiple "ans" instead of array
显示 更早的评论
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 个评论
Adam
2019-10-25
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
2019-10-25
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
2019-10-25
Oluremi Falowo
2019-10-25
Oluremi Falowo
2019-10-25
Oluremi Falowo
2019-10-25
Guillaume
2019-10-25
If it's a class on convolution, aren't you supposed to use a convolution to calculate the moving average then?
回答(1 个)
KALYAN ACHARJYA
2019-10-25
编辑:KALYAN ACHARJYA
2019-10-25
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 个评论
Oluremi Falowo
2019-10-25
KALYAN ACHARJYA
2019-10-25
编辑:KALYAN ACHARJYA
2019-10-25
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?
类别
在 帮助中心 和 File Exchange 中查找有关 Logical 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!
