使用 MATLAB 识别每个网格中的项目

Identify items in each grid using MATLAB

我有 refxy 大小 500 x 3 的数据集,其中每一行代表一个位置,因此第一、第二和第三列具有 x 坐标、y 坐标和该位置的 weight v1。使用下面的代码,我将这个区域划分为 14 x 18 个网格,然后我找到每个网格中有多少点在输出 blockNums_v1 中给出。

function gridcounttest
load refxy

x = refxy(:,1);
y = refxy(:,2);
v1 = refxy(:,3);

 nBinsX = 14 ;
 nBinsY = 18 ;
 xg     = linspace( 0, 700, nBinsX+1 ) ;
 yg     = linspace( 0, 900, nBinsY+1 ) ;
 nCells = nBinsX * nBinsY ;

 xId = sum( bsxfun( @ge, x, xg(1:end-1) ), 2 ) ;
 yId = sum( bsxfun( @ge, y, yg(1:end-1) ), 2 ) ;
 cellId = nBinsY * (xId - 1) + yId ;

 blockNums_v1  = accumarray( cellId, 1, [nCells, 1] ) 
 blockSum_v1  = accumarray( cellId, v1, [nCells, 1] ) 
 blockMean_v2 = accumarray( cellId, v1, [nCells, 1], @mean )

谁能帮我确定每个网格中包含哪些点,可能是行号?例如,如果网格编号 10 有 3 个点,分别位于第 23、51 和 432 行。此代码给出输出 3 但不是我现在需要得到的 23、51、432 :)

谢谢!!!

您可以通过

找到网格元素中的点行
rowsOfValuesInGridpoint10 = find(cellId == 10);

问题是当你想找到几个网格元素的点时,输出不均匀。

您可以将行存储在 Matlab 单元格中,例如

for i=1:nCells
 rowsInThisElement{i} = find(cellId == i);
end
rowsInThisElement{10}