如何计算此代码中每个网格框中的粒子数
以下是我的代码:
xyRange=[1,5];
P=3;
vx=0.6;
vy=0.4;
X=[];
Y=[];
for day=1:5
X=[X;randi(xyRange,P,1)];
Y=[Y;randi(xyRange,P,1)];
X=X+vx;
Y=Y+vy;
end
plot(X,Y,'kd');
grid on;
axis([1,50,1,50]);
j = floor(X/5)+1;
k = floor(Y/5);
box = k*10+j;
答案 0 :(得分:1)
如果您有统计工具箱,最简单的方法是使用hist3
。
在你的情况下,当我绘制网格时,看起来每个框以5为单位分开。因此,命令非常简单:
$(document).ready(function () {
$('html, body').animate({ scrollTop: 0 }, 'slow');
});
cnt = hist3([X,Y], {0:5:50 - 2.5, 0:5:50 - 2.5});
和X
是您的2D数据点,第二个元素是Y
和X
值的单元格数组,表示每个点的中心在每个网格中。请注意,定义的点是相对于左上角的原点。如果您想确保原点位于左下角一角,您实际上需要这样做:
Y
在我的跑步中我得到了这个:
cnt = flipud(cnt.');
制作情节时,我明白了:
如果您将计数与顶部生成的网格进行比较,您会看到匹配。但是,由于我指定了分档中心的方式,第一行和最后一行以及第一列和最后一列都没有意义,因此您可以安全地从分析中消除这些。
如果您想要一个很好的图示示例,请在没有任何输出参数的情况下调用cnt =
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 1 6 0 0 0 0 0 0 0 0
0 5 3 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
:
hist3
我们得到了这个: