我有相同形狀的二維陣列:
b8
>>>array([[42,42,42,...,43,37,47],
[41,41,40,...,44,33,34],...],dtype=uint8)
b11
>>>array([[77,77,77,...,41,41,42],
[77,77,77,...,41,41,42],...] dtype=uint8)
我想使用標準化差異索引來創建新陣列。歸一化指數應根據以下公式計算:
(b8-b11)/(b8 b11)
它應該生成值在 -1 到 1 之間的新陣列。但是,我意識到當我嘗試以這種方式計算它時會得到意外的值:
(b8-b11)/(b8 b11)
>>>
array([[1.85714286, 1.85714286, 1.85714286, ..., 0.02380952, 3.23076923,
0.05617978],
[1.86440678, 1.86440678, 1.87179487, ..., 0.03529412, 3.35135135,
3.26315789],...
1.857 和其他數字似乎是錯誤的,當我手動計算左下角的像素時,我得到了不同的結果:
(42-77)/(42 77)
>>>-0.29411764705882354
我相信我在這里缺少矩陣的非常基本的概念,我想了解我的錯誤并能夠獲得所需的結果。
uj5u.com熱心網友回復:
問題是uint8,它是無符號的 8 位。所以你的減法溢位:
np.uint8(42) - np.uint8(77)
# 221
uj5u.com熱心網友回復:
如果你能保證 b8 和 b11 中的值足夠小,任何加法都不會超過 256,那么你可以通過float64在減法之前利用對on 除法的提升來解決這個問題:
denom = b8 b11
ans = b8/denom - b11/denom
如果上溢/下溢在任何步驟中仍然存在風險,那么您必須盡快轉換為更大的整數型別或浮點型別。浮點數很難溢位。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/345539.html
