我想在numpy中加或減兩個數組,但結果必須爲每個元素定界。如果我限制典型值(即uint8),任何額外的和會產生一個溢出(即再次從零開始)和任何下溢的差(即再次從255開始)。這不是我想要的,即我想停在0/255(在我的例子中)。numpy數組的有界和或差數
有沒有辦法做到這一點,而不訪問每個元素?
預先感謝您。
我想在numpy中加或減兩個數組,但結果必須爲每個元素定界。如果我限制典型值(即uint8),任何額外的和會產生一個溢出(即再次從零開始)和任何下溢的差(即再次從255開始)。這不是我想要的,即我想停在0/255(在我的例子中)。numpy數組的有界和或差數
有沒有辦法做到這一點,而不訪問每個元素?
預先感謝您。
你可以使用一個掩模
實施例:除了不超過255:
import numpy as np
# create exaple data where sum exceeds 255
a = np.arange(118,130,dtype = np.uint8)
b = a.copy()
res = np.add(a,b, dtype = np.uint16);
mask = res > 255
res[mask] = 255
res = np.uint8(res)
結果是:
>>> print a
array([118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129], dtype=uint8)
>>> print b
array([118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129], dtype=uint8)
>>> print mask
array([False, False, False, False, False, False, False, False, False, False, True, True], dtype=bool)
>>> print res
array([236, 238, 240, 242, 244, 246, 248, 250, 252, 254, 255, 255], dtype=uint8)
掩模只能正確作爲numpy的陣列。否則,高級索引會返回一個視圖,而不是一個副本,請參閱SciPy/NumPy documentation.
這是否也工作,如果np.type是uint8?我檢查了它,答案是否定的。所以我需要在添加之前將數組轉換爲更大的類型(如何?)? – 2014-10-30 09:27:00
看我的編輯。現在,'a','b'和結果'res'是np.uint8 – jkalden 2014-10-30 10:02:26
好的,非常感謝,它的工作原理。 – 2014-10-30 10:48:58
你可以用OpenCV的工作,如果你有CV2庫:
import cv2
import numpy as np
x=np.uint8([250])
y=np.uint8([10])
print cv2.add(x,y) #250+ 10 =260=>255
答:
[[255]]
[這是一個類似的帖子](http://stackoverflow.com/q/19580102/832621),可以幫助你... – 2014-10-30 09:16:10