如何创建一个numpy矩阵,其值满足几个条件?

时间:2017-05-25 12:07:58

标签: python python-3.x numpy

我想创建一个首先满足这个条件的矩阵:

  1. e.g。如果值m[2][1] == 0< - > m[1][2] in {0,1}
  2. 对于这个,我使用上三角矩阵,如:

    m = np.ones((6, 6), int)
    m = np.triu(m, 1)
    

    我将剩余的一些随机值更改为零,直到达到一定百分比:

    MaxPer = 0.75   
    i, e = np.count_nonzero(m), np.count_nonzero(m)
    MAX = np.round(MaxPre*e)
    while i > MAX:
       m[np.random.randint(len(m[0][:]))][np.random.randint(len(m[0][:]))] = 0
       i = np.count_nonzero(m)
    

    现在第二个标准是我正在努力的标准:

    1. 如果m[1][2] == 1 & m[1][3] == 0< - > m[2][3] == 0
    2. 我想检查m中的所有值是否满足此条件(索引1,2,3是示例)。如果没有,我想将m[2][3]的值更改为零。我尝试使用for循环的以下代码,但它会将所有值覆盖为零。

      for k in range(len(m[0][:])):
                  for l in range(k, len(m[0][:])):
                      for j in range(l,len(m[0][:])):
                          if matrix[k][l] == 1 & matrix[k][j] == 0:
                              matrix[l][j] = 0
      

      如果没有循环,有没有一种简单的方法呢?

1 个答案:

答案 0 :(得分:0)

我认为强加你的第二个条件确实会导致矩阵归零。 你确定要吗

m[i][j] == 1 & m[i][k] == 0 <-> m[j][k] == 0

i,j和k之间没有任何依赖关系? 也许你想要这样的东西(这需要在fors中做一些改变)?

m[i][i+1] == 1 & m[i][i+2] == 0 <-> m[i+1][i+2] == 0