Matlab 对一组数据进行处理,使其散落在一个立体空间

问题:现在有一个三维数组(100*100*20),数组的第一列数据与x轴对应,第二列数据与y轴对应,第三列数据与z轴对应。求(Xi,Yi,Zi)(有很多个点)落在由这个三维数组确定的各个小立方区域的频数。详细说明:若坐标轴划分的网格区域x=[1:1:100],y=[1:1:100],z=[1:1:20]是以1为间隔的小立方体,(x1,y1,z1)=(2.5,2.3,1.2),则该点落在[2 2 3 3 1 2]的矩形框内;求这1000个点落在各个小矩形框内的频数.


% 随机数据 [xi,yi,zi] 正态分布产生随机数
xi = 10+2*randn(10000,1);
yi = 10+5*randn(10000,1);
zi = 15+5*randn(10000,1);

% x,y,z 方向上的格数
nx=10; ny=15; nz=10;

% 范围
x_min=5; x_max=15;
y_min=0; y_max=20;
z_min=0; z_max=30;

% 步长
dx = (x_max-x_min)/nx;
dy = (y_max-y_min)/ny;
dz = (z_max-z_min)/nz;

isout= ... % 范围之外的
    xi<=x_min | xi>x_max | ...
    yi<=y_min | yi>y_max | ...
    zi<=z_min | zi>z_max;
% 删除范围外的点
xi(isout)=[]; yi(isout)=[]; zi(isout)=[];

% x,y,z 方向上的格位,ceil是朝正无穷大四舍五入
xi = ceil((xi-x_min)/dx);
yi = ceil((yi-y_min)/dy);
zi = ceil((zi-z_min)/dz);

% 计数

counts=accumarray([xi,yi,zi],1,[nx,ny,nz],@sum,0);

set(gca,'nextplot','replacechild')
axis([1,ny,1,nx,1,nz])
daspect([1,1,1])
colormap hsv

dt=10/nz; % 大约 10s 显示完
for ind = 1:nz % z 方向
    slice(counts,[],[],ind)
    pause(dt)
end

dt=10/nx; % 大约 10s 显示完
for ind = 1:nx % y 方向
    slice(counts,[],ind,[])
    pause(dt)
end

dt=10/ny; % 大约 10s 显示完
for ind = 1:ny % x 方向
    slice(counts,ind,[],[])
    pause(dt)
end

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值