Как насчет следующего кода?
>> DirModel = rand(2, 2, 29, 1739) - 0.5;
>> Neg = (DirModel < 0);
>> DirModel2 = DirModel;
>> DirModel2(Neg) = DirModel2(Neg) + 360;
>> DirModel(:, :, 1, 1)
ans =
0.169128 -0.180931
0.055867 0.339892
>> DirModel2(:, :, 1, 1)
ans =
0.169128 359.819069
0.055867 0.339892
Давайте проверим, что происходит:
>> Neg = (DirModel < 0);
Neg
- логическая матрица 2 x 2 x 29 x 1739
, в которой 1 указывают индексы, где DirModel
имеет отрицательные значения.
>> DirModel2 = DirModel;
Это назначение обеспечивает копирование всех значений и сохранение размеров матрицы.
>> DirModel2(Neg) = DirModel2(Neg) + 360;
Только добавьте 360
к этим элементам матрицы, чье значение было отрицательным в исходном DirModel
.
Ваше назначение
DirModel2=DirModel(Neg)+360
напрямую инициирует новую матрицу DirModel2
и обращается только к отрицательным значениям DirModel
.Проверьте общее количество элементов вашего результата DirModel2
!Поэтому у MATLAB нет причин сохранять размеры матрицы.