我在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)]
答案 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%。