在Python中迭代函数的参数(使用2d numpy数组和小数列表)

时间:2018-07-03 12:16:14

标签: python loops numpy matrix iteration

我定义了一个带有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

1 个答案:

答案 0 :(得分:0)

像这样,对于第一个索引M,您只返回pi=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)