假設我有一個包含 5 行 4 列的矩陣:
arr = [[1,1,1,1],
[2,2,2,2],
[3,3,3,3],
[4,4,4,4],
[5,5,5,5]]
我想隨機地將這個矩陣的某個百分比逐行歸零。因此,如果我將百分比設定為零,則為 40%。我會得到以下資訊:
arr = [[0,0,0,0],
[2,2,2,2],
[3,3,3,3],
[0,0,0,0],
[5,5,5,5]]
什么是實作這一目標的好方法?謝謝!
uj5u.com熱心網友回復:
完成任務的一種方法是以下 (set num_zero_rows):
在線試試吧!
import random
arr = [[1,1,1,1],
[2,2,2,2],
[3,3,3,3],
[4,4,4,4],
[5,5,5,5]]
num_zero_rows = 2
zero_idxs = set(random.sample(range(len(arr)), num_zero_rows))
arr = [([0] * len(arr[i]) if i in zero_idxs else arr[i])
for i in range(len(arr))]
print(arr)
輸出:
[[0, 0, 0, 0], [2, 2, 2, 2], [0, 0, 0, 0], [4, 4, 4, 4], [5, 5, 5, 5]]
uj5u.com熱心網友回復:
您可以使用torch.bernouli以下方法對指標向量進行采樣:
torch.bernoulli(0.4 * torch.ones_like(arr[:, :1]))
一旦你有了這個向量,你就可以將它乘以arr:
out = torch.bernoulli(0.4 * torch.ones_like(arr[:, :1])) * arr
并獲得您想要的采樣陣列。
您還應該查看dropout函式。
uj5u.com熱心網友回復:
簡單的。如果您的矩陣有N行,請從[0, N-1]
inds = np.arange(N)
M = int(N * 40 / 100) # 40% of rows
inds = np.random.choice(inds, M, replace=False) # without replacement
..然后只需為特定行和所有列分配零
arr[inds, :] = 0.
uj5u.com熱心網友回復:
你可以這樣做,
import random
arr = [[1,1,1,1],
[2,2,2,2],
[3,3,3,3],
[4,4,4,4],
[5,5,5,5]]
for i in arr:
if random.randint(0, 1): # if 1 is hit, the entire line will zero out
for j in range(len(i)):
i[j] = 0
輸出嘗試1:
[[1, 1, 1, 1],
[2, 2, 2, 2],
[3, 3, 3, 3],
[0, 0, 0, 0],
[0, 0, 0, 0]]
輸出嘗試2:
[[0, 0, 0, 0],
[2, 2, 2, 2],
[0, 0, 0, 0],
[0, 0, 0, 0],
[5, 5, 5, 5]]
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/351760.html
