How to sort 3D data into bins?

Hey,
I'm looking for some function like 'gridfunc' in the example beneath.
Datapoints:
x: torque = [12,13,20,30]
y: speed = [512,800,1300,1506]
z: z = [2,2,1,4]
Intervalls of my desired grid:
torque_intervall = [10,20,30]
speed_intervall = [500,1000,1500,2000]
The function im looking for:
output = gridfunc(torque,speed,z,torque_intervall,speed_intervall)
output(torque=10..20,speed=500..1000)= [z(1),z(2)]
Thanks for any suggestions!

 采纳的回答

For each variable, histc() and take the second output, or histcounts() and take the third output. This will be the bin number along that dimension. Now you can use
output = accumarray([firstbinnum(:), secondbinnum(:), thirdbinnum(:)], z(:), [], @(vals) {vals}, {});
The result will be a 3D cell array where the first dimension reflects the bin numbers along the first variable, the second dimension reflects the bin numbers along the second variable, the third dimension reflects the bin number along the third variable. Each element of the cell array will be a cell array of z values that fell into the combination of the three bins; this might be empty if nothing happened to fall into that voxel.

2 个评论

Thanks! Thats exactly what i was looking for :)
Can you explain your code with the above example?

请先登录,再进行评论。

更多回答(1 个)

Thorsten
Thorsten 2016-7-4

0 个投票

Try hist3.

3 个评论

I already looked into hist3, but I don't want the number of datapoints in the intervall(torque=10..20,speed=500..1000), but the z values..
It’s going to be very difficult to create any sort of meaningful interpolation surface from your data:
torque = [12,13,20,30];
speed = [512,800,1300,1506];
z = [2,2,1,4];
figure(1)
stem3(torque, speed, z)
grid on
axis square
view([-60, 30])
xlabel('Torque')
ylabel('Speed')
zlabel('Z')
Well its just an example and not the actual data..

请先登录,再进行评论。

类别

帮助中心File Exchange 中查找有关 Resizing and Reshaping Matrices 的更多信息

产品

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by