从矩阵中随机删除和保存元素

时间:2018-01-30 12:17:32

标签: python numpy matrix

我在Python中编写了这段代码:

def remove_randomly(data, percentage):
    test_list = []
    np.random.shuffle(data)
    for i in range(data.shape[0]):
        for j in range(data.shape[1]):
            roll = np.random.randint(low=1, high=100)
            if roll > percentage:
                test_list.append((i, j, data[i, j]))
                data[i, j] = 0

获取矩阵数据和数字百分比,遍历整个矩阵,并将元素零(100%)保存到另一个名为test_list的对象。

是否有更好,更有效的方法来实现这一结果?我听说嵌套循环对你的健康有害。另外,我的数据矩阵恰好是巨大的,因此使用for循环进行迭代非常慢。

示例

假设数据是矩阵[1,2; 3,4]和百分比是25%。

然后我希望输出为(例如)data = [1,2; 0,4]和test_list = [(1,0,3)]

1 个答案:

答案 0 :(得分:2)

以下是您可以做的事情:

def remove_randomly(data, percent):
    np.random.shuffle(data)
    roll = np.random.randint(1, 100, data.shape) # array of random integers with the same shape as data
    indices = np.where(roll > percent) # indices of elements in `roll` that are greater than the percentage 

    test_list = data[indices]
    data[indices] = 0

    return indices, test_list # return indices and the values

请注意,np.random.randint(1, 100)只会生成范围[1, 100)中的随机整数,因此永远不会生成100%。