Вы выполняете итерацию и обновляете только те ячейки, которые имеют m == n. Это происходит потому, что вы используете один цикл for. Все остальные значения не посещаются и никогда не обновляются, поэтому они остаются равными нулю.
Если вы посмотрите на свою петлю:
for i=1:length(mymatrix)
На первой итерации i = 1, и она обновится:
mymatrix_new(1,1,:) = wdenoise(squeeze(mymatrix(1,1,:)));
Во второй итерации i = 2, и она обновится:
mymatrix_new(2,2,:) = wdenoise(squeeze(mymatrix(2,2,:)));
Как видите, вы никогда не обновите mymatrix_new (1, 2) или любую другую ячейку, кроме тех, которые имеют m == n == i
Вам нужно использовать два вложенных цикла, чтобы вы обновляли все комбинации i
и j
mymatrix_new = zeros(size(mymatrix));
for i=1:length(mymatrix)
for j=1:length(mymatrix) % Here it assumes the matrix is a square
mymatrix_new(i,j,:) = wdenoise(squeeze(mymatrix(i,j,:)));
end
end