首页 > 解决方案 > 在python中随机将矩阵中一定百分比的行归零

问题描述

假设我有一个包含 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]]

什么是实现这一目标的好方法?谢谢!

标签: pythonarraysnumpy

解决方案


完成任务的一种方法是遵循(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]]

或者相同代码的更短/更清洁/更快的变体:

在线尝试!

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

for i in random.sample(range(len(arr)), num_zero_rows):
    arr[i] = [0] * len(arr[i])

print(arr)

推荐阅读