2013-09-16 2 views
0

У меня есть 4d-матрица (по времени по-по-широте по долготе) в MATLAB, которую нужно разделить на суммарное значение из всех групп в 3d-матрице (время по-широте по долготе) в течение определенного периода времени. Я хотел бы иметь 4d-матрицу, представляющую фракционный клапан для каждой группы в 4d-матрице (время от времени по широте по долготе) Как это сделать?Matlab: 3d-матрица, деленная на 2d-матрицу

Например (NetCDF файл):

short npp(time, pft, latitude, longitude) ; 
short npptot(time, latitude, longitude) ; 

Я хотел бы сделать этот расчет:

fraction = npp ./ npptot 

Результаты должны быть в 4d матрице времени по-группы-по-широте -по-долготы.

short fraction(time, pft, latitude, longitude) ; 

ответ

4

bsxfun предназначен для такого расширения размеров. Фокус в том, что размеры должны соответствовать точно, за исключением размеров, которые вы хотите расширить. Это означает, что ваша трехмерная матрица должна быть вместо 4d x 1 x lat x lon матрицей:

npptot_reshaped = reshape(npptot, [size(npptot,1) 1 size(npptot,2) size(npptot,3)]); 
fraction = bsxfun(@rdivide, npp, npptot_reshaped); 

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

  • Нет связанных вопросов^_^