Numpy - 创建矩阵

时间:2015-04-19 20:50:48

标签: python loops for-loop numpy matrix

我想创建这个矩阵:

[[ 1.  1.  0.  0.  0.  0.  0.  0.  0.  0.]
 [ 1.  1.  1.  0.  0.  0.  0.  0.  0.  0.]
 [ 0.  1.  1.  1.  0.  0.  0.  0.  0.  0.]
 [ 0.  0.  1.  1.  1.  0.  0.  0.  0.  0.]
 [ 0.  0.  0.  1.  1.  1.  0.  0.  0.  0.]
 [ 0.  0.  0.  0.  1.  1.  1.  0.  0.  0.]
 [ 0.  0.  0.  0.  0.  1.  1.  1.  0.  0.]
 [ 0.  0.  0.  0.  0.  0.  1.  1.  1.  0.]
 [ 0.  0.  0.  0.  0.  0.  0.  1.  1.  1.]
 [ 0.  0.  0.  0.  0.  0.  0.  0.  1.  1.]]

我可以通过

轻松获得单位矩阵
import numpy as np
matrix = np.eye((10))

3 个答案:

答案 0 :(得分:1)

您可以使用k eye参数来设置对角线的索引:

>>> m1= np.eye((10))
>>> m2= np.eye((10),k=1)
>>> m3 = np.eye((10),k=-1)
>>> m1+m2+m3
array([[ 1.,  1.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.],
       [ 1.,  1.,  1.,  0.,  0.,  0.,  0.,  0.,  0.,  0.],
       [ 0.,  1.,  1.,  1.,  0.,  0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  1.,  1.,  1.,  0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  1.,  1.,  1.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  1.,  1.,  1.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  0.,  1.,  1.,  1.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  0.,  0.,  1.,  1.,  1.,  0.],
       [ 0.,  0.,  0.,  0.,  0.,  0.,  0.,  1.,  1.,  1.],
       [ 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  1.,  1.]])

或者:

>>> np.triu(np.tril(np.ones((10,10)),k=1),k=-1)
array([[ 1.,  1.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.],
       [ 1.,  1.,  1.,  0.,  0.,  0.,  0.,  0.,  0.,  0.],
       [ 0.,  1.,  1.,  1.,  0.,  0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  1.,  1.,  1.,  0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  1.,  1.,  1.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  1.,  1.,  1.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  0.,  1.,  1.,  1.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  0.,  0.,  1.,  1.,  1.,  0.],
       [ 0.,  0.,  0.,  0.,  0.,  0.,  0.,  1.,  1.,  1.],
       [ 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  1.,  1.]])

答案 1 :(得分:0)

自己敲门

n = 10
[[1. if (row == 0 and col in (0, 1)) or
        (row == n-1 and col in (n-2, n-1)) or
        (row not in (0, n-1) and col in (row-1, row, row+1))
     else 0. for col in range(n)] for row in range(n)]

答案 2 :(得分:0)

使用标准的python库元素,问题可以解决如下:

迭代矩阵(子列表列表)。

  1. 表示第一行(第一个列表)将第二个元素翻转为1。
  2. 为最后一行翻转元素。
  3. 在最后一个到1之前
  4. 表示其余行。
  5. 找到索引1并将其指定给值。
  6. 将右侧和左侧的元素翻转为1。

    表示矩阵中的行:

    if row == matrix[0]:
        row[1]=1
    
    elif row == matrix[len(matrix)-1]:
        row[len(row)-2] = 1
    
    else:
        p= row.index(1)
        row[p-1], row[p+1] = 1,1