2015-10-06 2 views
2

У меня есть набор данных в refxy размере 500 x 3, где каждая строка представляет одно место таким образом, что первые, 2-й и 3-й столбцы x координат, y координаты и weight v1 от местоположения. Используя следующий код, я разделяю эту область на сетку 14 x 18, и я нахожу, сколько точек в каждой сетке дает на выходе blockNums_v1.Определение элементов в каждой сетке с помощью MATLAB

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, которые мне нужно получить сейчас :)

Спасибо !!!

+0

Что такое 'ge' и каковы данные' refxy'? – rst

+0

@RobertStettler 'ge'is больше или равно. http://de.mathworks.com/help/matlab/ref/ge.html – JaBe

ответ

1

Вы можете найти строки точек, которые находятся в элементе сетки по

rowsOfValuesInGridpoint10 = find(cellId == 10); 

Проблема в том, что выход не является равномерным, если вы хотите, чтобы найти точки нескольких элементов сетки.

Вы можете хранить строки в ячейках Matlab, например.

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

@ JaBe Спасибо !!! это работает хорошо – Frey