2015-02-14 2 views
-2

Я хотел бы интерполировать 4D-матрицу. Размер матрицы - 400X200X400X200 комплексных чисел. Im используя функцию: interpnMatlab Интерполяция матрицы 4D

И для этого я должен установить установить свою новую сетку с помощью: ndgrid

Но ndgrid занимает часы. Не могли бы вы помочь?

Спасибо!

Пример кода:

[Y X V U]=ndgrid (ky_vec,kx_vec,kv_vec,ku_vec); 
F=f(Y,X,V,U); 
[Yt Xt Vt Ut]=ndgrid (ky_vec,kx_vec,ky_vec,kx_vec,'single'); 
A=interpn(Y,X,V,U,F,0.9*Yt,0.9*Xt,(1-0.9)*Vt,(1-0.9)*Ut,'linear',0.0); 
+1

Пожалуйста, пост MWE. Что такое 'ky_vec',' kx_vec', 'kv_vec',' ku_vec', 'f'? – knedlsepp

+0

Подождите? Если у вас уже есть 'f', почему вы хотите сделать интерполяцию? Разве это не 'f' функция? Вам действительно нужно уточнить вашу актуальную проблему, это, похоже, не имеет никакого смысла. – knedlsepp

+0

@kndelsepp Возможно, 'f' занимает еще больше времени, и интерполяция считается более быстрой операцией? Во всяком случае, мы говорим о миллиардах пунктов, конечно, это занимает очень много времени. Вопрос должен быть уточнен. – Trilarion

ответ

1

'single' аргумент не принадлежит там. Вместо этого он интерпретируется как ones(1,length('single')) и, таким образом, дает даже матрицы huger.

Вы также можете сгенерировать griddedInterpolant вместо, который бы сохранить память:

F_interp = griddedInterpolant({ky_vec,kx_vec,kv_vec,ku_vec},F) 
+0

Это было решение, спасибо! – user1112136

+0

@ user1112136: Если вы считаете, что этот ответ является решением вашей проблемы, пожалуйста, примите его, нажав на серое галочку рядом с ним. – knedlsepp

Смежные вопросы