來進一步解釋我的標題:我有一個浮動陣列,我想四捨五入,但是,我想將數字四捨五入成爲不是最接近的整數。例如,讓我們說,我想這些數字要四捨五入到是2本的倍數取整就是我:如何將浮點數轉換爲縮放整數?
Temp = np.around(data,0)
與data
是float數組。數字四捨五入爲最接近的整數,但我希望他們要舍入的2我的目標最接近的倍數:
0.9 - > 0
1.1 - > 2
等
謝謝!
來進一步解釋我的標題:我有一個浮動陣列,我想四捨五入,但是,我想將數字四捨五入成爲不是最接近的整數。例如,讓我們說,我想這些數字要四捨五入到是2本的倍數取整就是我:如何將浮點數轉換爲縮放整數?
Temp = np.around(data,0)
與data
是float數組。數字四捨五入爲最接近的整數,但我希望他們要舍入的2我的目標最接近的倍數:
0.9 - > 0
1.1 - > 2
等
謝謝!
二的倍數是直截了當:
x = np.array([0.9, 1.1, 10.2, 7.4])
2*np.round(x/2) # array([ 0., 2., 10., 8.])
但是有沒有一個通用的方法來此。例如,沒有「繞到最近的斐波納契數」的obvoius。考慮函數f(x)=2*x
的倍數2
的公式:1)首先應用f
的倒數(在這種情況下除數),2)然後round
,3)然後應用f
得出結果。爲此,f
必須存在,具有相反的結果,並且結果也必須是int
;所以它只適用於一些功能。
多麼偉大,但簡單而詳細的答案。非常感謝,夥伴,這完全解決了我的問題! – jstack
@Tom10:但許多語言都有一個「最接近甚至最接近的圓」(也稱爲「銀行家四捨五入」,儘管銀行家通常不會這樣),並且根據定義甚至2的倍數。有沒有辦法設置默認舍入模式? –
@ tom10,不,顯然沒有。相反,你必須運用技巧來獲得你想要的。 –
以下是這樣做的一種方式:
import math
data = [0.9, 1.1, 10.2, 7.4]
rounded_numbers = []
for num in data:
rounded_up_num = math.ceil(num)
if rounded_up_num % 2 == 0:
rounded_num = rounded_up_num
else:
rounded_num = math.floor(num)
rounded_numbers.append(int(rounded_num))
print rounded_numbers # [0, 2, 10, 8]
似乎是一個很好的方法。但是,如果只評估一次'math.ceil(num)',執行速度會更快。 –
好的答案,但有點過於複雜,因爲它導致了我必須修復的一些錯誤。謝謝,雖然。 – jstack
@ChrisMueller,編輯:) –
是不是1的一個因子? – Jeremy
這沒有一個通用的方法..即沒有「舍入到最近的斐波那契數」。你是否特別想要「最接近2的倍數」,或者你只對一般方法的答案感興趣? – tom10
讓我們說2具體,因爲我可以找出如果需要從那裏改變它,@ tom10 – jstack