我有一個變數a = [0.129, 0.369, 0.758, 0.012, 0.925]。我想將此變數轉換為桶形變數。我的意思在下面解釋。
min_bucket_value, max_bucket_value = 0, 1(可以是任何值,例如 0 到 800,但最小值始終為 0)
num_divisions = 10(對于這個例子,我取了 10,但它也可以更高,比如 80 格而不是 10)
桶/磁區范圍如下所示。
0 - 0.1 -> 0
0.1 - 0.2 -> 1
0.2 - 0.3 -> 2
0.3 - 0.4 -> 3
0.4 - 0.5 -> 4
0.5 - 0.6 -> 5
0.6 - 0.7 -> 6
0.7 - 0.8 -> 7
0.8 - 0.9 -> 8
0.9 - 1.0 -> 9
所以,transformed_a = [1, 3, 7, 0, 9]
所以這就像我劃分不同min_bucket_value, max_bucket_value的num_divisions 范圍/桶然后轉換原始a以告訴它位于哪個桶
我試過創建torch.linspace(min_bucket_value, max_bucket_value, num_divisions),但不確定如何向前移動并將其映射到一個范圍,以便我可以獲得它所屬的存盤桶索引
你們能幫忙嗎
編輯
這個問題有一個擴展。
假設我們有a = [127, 362, 799]并且我想創建兩個桶。一個是粗桶,所以a_transform = [12, 36, 89],但是如果我也想要一個細桶怎么辦,這樣我的第二個轉換就變成了a_fine_transform = [7, 2, 9]。
范圍內的子范圍索引。基本上,粗劃分有 80 個桶(在第 12 個桶中給出 127),然后是具有 10 個磁區的精細桶,這告訴我們 127 位于第 12 個粗桶和第 7 個細桶中
a也可以浮動。例如,a = [127.36, 362.456, 789.646]。
所以a_coarse_transform = [12, 36, 78]&a_fine_transform = [7, 2, 6]
在哪里min_bucket_value, max_bucket_value, num_coarse_divisions, num_fine_divisions = 0, 1, 80, 10
uj5u.com熱心網友回復:
對于等間距的桶,您可以根據桶的數量、寬度或位置來執行恒定時間。
使用仿射映射將值從范圍 (min_bucket_value, max_bucket_value) 放置到范圍0 < a1 < 1
a1 = (a - min_bucket_value) / (max_bucket_value - min_bucket_value)
獲取磁區索引
b = (a1 * num_divisions).astype(torch.long)
使用此方法,如果您的元素在 bucket range 之外,a您將擁有 range 之外的索引0:num_divisions。
如果要應用多級磁區
a_coarse_transform, r = divmod(a1 * coarse_divisions, 1)
a_fine_transform, r = divmod(r * fine_divisions, 1)
如果你想要一個更高的級別,你可以簡單divmod地r再次申請,指定部門的數量
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/533451.html
標籤:麻木的火炬回归
