总结3d数组matlab

时间:2013-01-24 10:55:06

标签: matlab

x=imread('test.jpg');
imshow(x);
total = 0;
for i=1:2
  for j=1:2
      for k=1:2
        total = total + abs(x(i,j,k));
      end
  end
end
total

无论i,j,k的最大值是多少,上面的代码都会打印总数为255。请解释

2 个答案:

答案 0 :(得分:10)

它输出255,因为matlab没有溢出整数,数据类型是uint8

 a = repmat(uint8(100),5, 1)
 a(1)+a(2)
 a(1)+a(2)+a(3)

输出将为200和255,因为Matlab将输出钳位在最大值,而不是环绕。如果你使用Dennis给出的sum函数,那么当Matlab转换为双重

时,你得到正确的值
sum(a)

应该输出500作为输出。

答案 1 :(得分:3)

不确定您的代码片段是什么,但是如果您想要对数组的绝对值求和,那么这很容易:

sum(abs(x(:)))

如果您只想要包含角落中前两个值的子矩阵:

subM= x(1:2,1:2,1:2)
sum(abs(subM(:)))