In an array xy=[x y], reduce array length by assigning average values of y based on a predefined range of x
2 次查看(过去 30 天)
显示 更早的评论
I have the x values in the range x=[x1 ... xn] and y values related to x through the function f as in y=f(x). Now I want to break down down the y array to a smaller array Y in that I first find all values related to x in the range x1>x>x0 and then calculate the mean of y values whose corresponding x's are in this range. Then I move on to the next range which is x2>x>x1 and calculate the mean of the corresponding y values and so on. At the end, this will look like converting a xy larger dataset to a smaller one, as shown in the picture. Since this is usually a really large dataset, I'd rather do this without a loop.
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/1392054/image.png)
0 个评论
回答(1 个)
Steven Lord
2023-5-24
Use findgroups or discretize to bin your X data into groups then use splitapply or groupsummary to calculate the @mean for each of those groups.
1 个评论
Dyuman Joshi
2023-5-24
This is neat. Though I found it difficult to implement the other pair - findgroups with groupsummary.
x = [(1:20)' randi(50,20,1)];
disp(x)
%Defining range of values
idx = [1 4 8 12 16 20];
out = discretize(x(:,1),idx);
splitapply(@mean, x(:,2), out)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Data Type Conversion 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!