我有一個圖像表示爲numpy數組,其值爲0和255(範圍內沒有其他值)。將其轉換爲0和1數組的最佳方法是什麼?如何將數組值0和255轉換爲相應的0和1陣列
0
A
回答
1
my_array = np.array([255,255,0,0])
my_array = my_array/255
將輸出
array([ 1., 1., 0., 0.])
換句話說,它會工作沒有正常化的0-255(即使你說,這是唯一的2個值範圍內的所有值,它會爲一切工作在兩者之間爲好,同時保持比)
1
可以屏蔽(或者與>0
或==255
還是真的什麼都重要),然後轉換成鍵入int
:
npa = np.array([0,255,0,255,255,255,0])
npa
array([ 0, 255, 0, 255, 255, 255, 0])
(npa>0).astype('int')
array([0, 1, 0, 1, 1, 1, 0])
2
聽起來像是numpy.clip
作業:
>>> a = np.array([0, 255, 0, 255, 255, 0])
>>> a.clip(max=1)
array([0, 1, 0, 1, 1, 0])
從文檔:
給定一個時間間隔,在時間間隔外值被夾在間隔邊緣。例如,如果指定了[0,1]的間隔,則小於0的值變爲0,並且大於1的值變爲1.
0
因爲有太多答案給出正確答案,所以我只是想要測試不同的方法,並決定在計算成本方面哪個最好。我編寫了下面的代碼,它創建一個給定的數據集,它是一個隨機放置的0和255值的圖像,然後研究每個提議的算法的平均流逝時間,改變圖像的像素數量(注意我用平均以減少在測量中的噪聲):
import numpy as np
import time
times1_all = []
times2_all = []
times3_all = []
for i in xrange(20):
times1 = []
times2 = []
times3 = []
xsizes = np.arange(100,10000,500)
print len(xsizes)
for xsize in xsizes:
#Create the dataset
ysize = xsize
xrand = np.random.randint(0,xsize, xsize)
yrand = np.random.randint(0,ysize, xsize)
a = np.zeros([xsize,ysize])
a[xrand, yrand] = 255
start = time.time()
b = (a == 255).astype('int')
stop = time.time()
time1 = stop-start
start = time.time()
b = a/255
stop = time.time()
time2 = stop-start
start = time.time()
b = a.clip(max=1)
stop = time.time()
time3 = stop-start
print time3
times1.append(time1)
times2.append(time2)
times3.append(time3)
print 'Elapsed times --> (1)/(1)=%.2f, (2)/(1)=%.2f, (3)/(1)=%.2f' %(time1/time1,time2/time1,time3/time1)
times1_all.append(times1)
times2_all.append(times2)
times3_all.append(times3)
times1_mean = np.mean(times1_all, axis=0)
times2_mean = np.mean(times2_all, axis=0)
times3_mean = np.mean(times3_all, axis=0)
該測試的結果顯示在下面的圖像中,其示出了不同的算法的經過時間爲(I圖像的像素數目的函數僅引用x軸上的像素的邊數)。正如預期的那樣,圖像越大,執行這項工作所需的時間就越長。然而,顯然在算法之間存在系統差異。對於任意數量的像素,@randomir和@Ofer提出的算法比@ user1717828提出的算法要好。所以,根據這個度量標準,@Ofer和$ randomir是等價的。
相關問題
- 1. 將(0&(1 | 0)| 1)&(0 | 1))等字符串轉換爲相應的真值
- 2. 轉換numpy的陣列爲0或1
- 3. 將1 BYTE轉換爲int值,從00..FF到0..255
- 4. 轉換表到0的矩陣和1
- 5. 將0和1的數組轉換爲整數
- 6. 將整數從0到255(1字節)轉換爲NSDATA
- 7. 將1和0的字符串轉換爲字節數組
- 8. 將1和0的數組轉換爲二進制變量
- 9. 將0和1的數組轉換爲base36字符串
- 10. 如何將R中的矩陣元素從0 | 1轉換爲1 | 0?
- 11. 將3 .... 0轉換爲0 ...... 1,Unity3d(Time.time)
- 12. 八度矩陣:1的替換0和更換1與0的
- 13. 如何將「0」和「1」轉換爲false和true
- 14. 將字符串轉換爲0和1,將0和1轉換爲字符串的有效方法?
- 15. 如何在C#中將int字節顏色值(0-255)轉換爲float/double值(0-1)?
- 16. 真值表 - 將布爾值轉換爲1和0
- 17. js如何將0和1的字符串轉換爲字節
- 18. 轉換設置爲numpy 0-1數組?
- 19. 按位運算符將0轉換爲1並將1轉換爲0
- 20. 如何將值 - listViewRecs.SelectedItems [0] .SubItems [0]轉換爲整數? - C#.NET
- 21. 僅包含0和1值的數組
- 22. 將隨機字節(0-255)轉換爲PHP中的浮點數?
- 23. 將SQL列空值轉換爲0
- 24. 如何將一個numpy數組更改爲0和1的特定矩陣
- 25. HSV(0 .. 255)RGB(0 .. 255)
- 26. 轉換0和1的一個字符串轉換爲字節數組
- 27. 我如何交換元件1的陣列(包括只有1和0的)的0,使得全1在一起
- 28. Spark:如何將LabeledPoint特徵值從int轉換爲0/1?
- 29. 將[0-255]整數範圍轉換爲[0.0-1.0]浮點範圍
- 30. 有沒有辦法將圖像轉換爲0和1的多維數組
你可以做'-a.astype(np.int8)',在這種特定情況下,溢出將工作完全正確。 – Akavall