我定义了一个带有2个参数的函数:对称矩阵M
和概率值p
。我想定义一个遍历我的参数的函数。循环以0.01的概率开始,并在到达p
时停止。在每个步骤中,函数都会根据概率从矩阵M
中选择随机的行和列并将其删除。然后以增加的概率对新的M
执行相同的操作。我的代码无法获得结果
def frange(start, end, step):
tmp = start
while tmp < end:
yield tmp
tmp += step
def loop(M, p):
for i in frange(0.01, p, 0.01):
indices = random.sample(range(np.shape(M)[0]),
int(round(np.shape(M)[0] * i)))
M = np.delete(M, indices, axis=0) # removes rows
M = np.delete(M, indices, axis=1) # removes columns
return M, indices
答案 0 :(得分:0)
像这样,对于第一个索引M
,您只返回p
和i=0.01
,这是因为循环将在您返回内容后立即停止。另外,由于您可以使用python中提供的range
,因此第一个功能是多余的。我建议您使用一个列表来返回矩阵和索引(例如,也可以使用np.arrays来完成此操作)。
def loop(M, p):
mat_list = []
indices_list = []
for i in range(0.01, p, 0.01):
indices = random.sample(range(np.shape(M)[0]),
int(round(np.shape(M)[0] * i)))
M = np.delete(M, indices, axis=0) # removes rows
M = np.delete(M, indices, axis=1) # removes columns
mat_list.append(M)
indices_list.append(indices)
return mat_list, indices_list
如果您还想包含概率p
,则必须遍历
range(0.01, p+0.01, 0.01)
。