我真的不认为这是一个精确问题,答案应该是0.226左右。这是确切的代码:
val = I(i,j)
bucketSize
pos = val / bucketSize
I
只是我从中获取值的矩阵。以下是MATLAB的输出:
val =
29
bucketSize =
128
pos =
0
我错过了什么?
答案 0 :(得分:16)
我的猜测是,您的矩阵I
是从image file加载的像素数据,其值通常为unsigned 8-bit integers。如前所述,将两个整数值转换为double precision值将确保MATLAB执行浮点除法而不是整数除法(这将使结果四舍五入)。
将一个值转换为double precision是不够的:
对于所有二进制操作,其中一个操作数是整数数组 数据类型(64位整数除外),另一个是标量double, MATLAB使用elementwise双精度计算运算 算术,然后将结果转换回原始整数 数据类型。
如果您想了解有关MATLAB中不同数值数据类型的更多信息,可以查看this documentation。
答案 1 :(得分:11)
尝试:
double(val)/double(bucketSize)
答案 2 :(得分:1)
我明白了,问题是我的矩阵出于某种原因包含了uint8,而不是双打。刚刚将val = I(i,j)改为val = double(I(i,j)),一切都很好。感谢。
答案 3 :(得分:0)
这些变量可能是整数而不是双数或长数。 1/2返回.5?其他操作有效吗?