In an array xy=[x y], reduce array length by assigning average values of y based on a predefined range of x
4 ビュー (過去 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!