Difference between columns, fixed the first column, in a matrix only if values are diferent from 0

1 次查看(过去 30 天)
Hi, I have a 3D-matrix and I want to calculate differences between columns, fixed the first column (this column can have negative values), and the value be positive or zero, i.e., for each 3D dimension calculate: max ( column(i)-column(1), 0 ), but if values in columns i are zero, I don't want to calculate the difference anb the result be zero, i.e.,
I give you an example:
Any suggestion? Thank you!

采纳的回答

Guillaume
Guillaume 2017-11-10
You've already figured out most of it:
A = cat(3, [10 3 15 12 3; 2 1 4 0 6; -5 0 5 4 12; 7 9 4 0 8], [-3 4 10 3 0; -3 1 0 4 6; 7 2 3 3 8; 8 5 15 5 9]);
result = max(A(:, 2:end, :) - A(:, 1, :), 0); %get difference with column 1, set to 0 if negative
result(A(:, 2:end, :) == 0) = 0 %set to 0 if original value is 0
You could also do it as a one liner but it's a bit more obscure:
result = max(A(:, 2:end, :) - A(:, 1, :), 0) .* (A(:, 2:end, :) ~= 0)

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 Creating and Concatenating Matrices 的更多信息

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by