2015-05-29 2 views
0

я должен запустить Matlab код на старой версии, которая не поддерживает bsxfun и нужно написать эквивалентное выражениеMatlab bsxfun альтернативная причина неправильный результат

matx = bsxfun(@rdivide, matx, reshape(f, 1, 1, length(f))); 

Я попробовал этот

matx=matx./ones(size(reshape(f, 1, 1, length(f)),1)); 

но я получаю неправильный результат

matx размер 246x301x81 f размер 1x81 до того призывание istruction, которые используют bsxfun

ответ

1

Поскольку matx является 3D-массива и f является вектор-строка длиной, равной количеству элементов в dim-3 из matx, можно выполнить bsxfun эквивалентное расширение/репликации с repmat, а затем выполняют поэлементное деление, как так -

% Get size of matx 
[m1,n1,r1] = size(matx); 

%// Replicate f to the size of matx and perform elementwise division 
matx = matx./repmat(permute(f,[1 3 2]),[m1 n1 1]) 
+0

с отредактированном код теперь я получаю эту ошибку 'ошибка с помощью изменения формы перекраивать количество элементов не должны change.' – AndreaF

+0

@AndreaF Попробуйте вместо этого:' matx = matx./ reshape (f (единицы (m1 * n1,1),:), [m1 n1 r1]) '? – Divakar

+0

та же ошибка при изменении формы также с 'matx = matx./reshape(f(ones(m1*n1,1),:),[m1 n1 r1])' – AndreaF

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