问题描述
如果我很好理解,Python中Matlab的const getLargestSumOfFiveConsecutiveElements = (arr) => {
let currSum = getSum(arr,4);
let largestSum = currSum;
for (let i = 1; i <= arr.length - 5; i++) {
currSum -= arr[i - 1]; // subtract element to the left of curr window
currSum += arr[i + 4]; // add last element in curr window
largestSum = Math.max(largestSum,currSum);
}
return largestSum;
};
const getSum = (arr,start,end) => {
let sum = 0;
for (let i = start; i <= end; i++) {
sum += arr[i];
}
return sum;
};
的对应对象是im2uint8
中的img_as_ubyte
但是以下给出了不同的结果
scikit-image
如果有问题,请在Windows 10下使用
请问有什么想法吗?
解决方法
我不确定Matlab在做什么,但是scikit-image乘以255(uint8的最大值),然后使用NumPy's default rounding(即"round to nearest,ties to even")四舍五入。这里有一些实验可以澄清正在发生的事情:
In [10]: from skimage import util
In [11]: 0.3 * 255
Out[11]: 76.5
In [12]: np.round(76.5)
Out[12]: 76.0
In [13]: 77.5 / 255
Out[13]: 0.30392156862745096
In [14]: 0.30392156862745096 * 255
Out[14]: 77.5
In [15]: np.round(0.30392156862745096 * 255)
Out[15]: 78.0
In [16]: util.img_as_ubyte([0.30392156862745096])
Out[16]: array([78],dtype=uint8)