Используя ND интерполяцию с общим рангом? - PullRequest
0 голосов
/ 13 октября 2018

Я ищу элегантный способ использования ndgrid и interpn в более "общем" виде - в основном для любого заданного размера ввода, а не для обработки каждого ранга в отдельном случае.

Если исходные данные ND совпадают с сеткой ND, заданной в массиве ячеек 1D векторов для каждой координаты Mesh={[x1]; [x2]; ...; [xn]}, и координаты запроса / вывода, заданные таким же образом (QueryMesh), как мне сгенерировать ndgridматрицы и использовать их в interpn без установки регистра для каждого измерения?

Кроме того, если есть лучший способ определения сетки - я более чем готов изменить.

Вот довольно очевидная, концептуальная (и НЕ РАБОТАЮЩАЯ) схема того, что я хочу получить, если неясно

Mesh={linspace(0,1,10); linspace(0,4,20); ... linsapce(0,10,15)};
QueryMesh={linspace(0,1,20); linspace(0,4,40); ... linsapce(0,10,30)};
Data=... (whatever)
NewData=InterpolateGeneric(Mesh,QueryMesh,Data);


function NewData=InterpolateGeneric(Mesh,QueryMesh,Data)
    InGrid=ndgrid(Mesh{:});
    OutGrid=ndgrid(QueryMesh{:});
    NewData=interpn(InGrid{:},Data,OutGrid{:},'linear',0.0)
end

1 Ответ

0 голосов
/ 13 октября 2018

Я думаю, что вы ищете, как получить несколько выходов из этой строки:

OutGrid = ndgrid(QueryMesh{:});

Так как ndgrid производит столько выходных массивов, сколько входных массивов он получает, вы можете создать пустую ячейкумассив таким образом:

OutGrid = cell(size(QueryMesh));

Затем докажите каждый из элементов OutGrid в качестве выходного аргумента:

[OutGrid{:}] = ndgrid(QueryMesh{:});
...