Сетка из разбросанных данных, индекс превышает размерность - PullRequest
0 голосов
/ 13 февраля 2012

У меня есть широта, долгота, данные для данных за месяц, я работаю над ними, чтобы поставить на регулярную равномерную сетку (2 градуса) без интерполяции (биннинг).Я получаю ошибку: индекс превышает размеры "

У меня есть lat, lon, var в матрице столбцов, они получены из нескольких файлов за 1 месяц (тысячи строк). Здесь я получаю сообщение об ошибке сX(zind(k,1),zind(k,2))=mean(zind(ind));, где индекс превышает размеры. Спасибо за помощь,

, где x = lat, y = lon, z = var

   % make grid for scattered lat, lon, var
    data=load('mydata.txt')
    x=data(:,1);
    y=data(:,2);
    z=data(:,3);
    %make a grid with 2 degree
    cellsize=2;
    minx=-90;
    maxx=90;
    miny=-180;
    maxy=180;
    xi=(minx:cellsize:maxx);
    yi=(miny:cellsize:maxy);
    [X,Y]=meshgrid(xi,yi);
    [m,n]=size(X);
    %populate grid and make average
    xind=floor((x-minx)./cellsize)+1;
    yind=floor((y-miny)./cellsize)+1;
    zind=unique([yind,xind],'rows');
    Z=ones(m,n).*NaN;

    for k=1:length(zind)
    ind=find(xind==zind(k,2)&...
     yind==zind(k,1)==1);
  X(zind(k,1),zind(k,2))=mean(zind(ind));
 end
    %make a plot
    figure;
    axis([-180 180 90 -90]);
    imagesc(xi,yi,Z);
    **********************

1 Ответ

0 голосов
/ 13 февраля 2012

Во-первых:

ind=find(xind==zind(k,2)&...
     yind==zind(k,1)==1);

Я не думаю, что ==1 должен быть там.

Во-вторых, я думаю, что ваша ошибка происходит от mean(zind(ind)): вы не делаетехочу среднее значение zind, являющееся индексами уникальных (y, x) индексов.Вы хотите среднее значение z:

X(zind(k,1),zind(k,2))=mean(z(ind));  % changed last zind -> z
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...