Python填充矩阵具有特定值

时间:2015-04-23 12:57:55

标签: python matrix

我有2D矩阵,我想用0和1填充它。我有一个列表包含一些值。

例如:

values = [1, 3, 5, 8]

我想创建这个矩阵

matrix = [[0, 1, 0],
          [1, 0, 1],
          [0, 0, 1]]

我用两个嵌套的for循环witf if语句做了这个。值是从0到100的随机整数。我的矩阵将是10 * 10。有没有办法让这更优雅?

2 个答案:

答案 0 :(得分:8)

如果您可以使用NumPy,请使用花式索引到数组的展平视图并重新整形:

In [1]: import numpy as np

In [2]: a = np.zeros(9)

In [3]: a
Out[3]: array([ 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.])

In [4]: values = [1,3,5,8]

In [5]: a[values] = 1

In [6]: a
Out[6]: array([ 0.,  1.,  0.,  1.,  0.,  1.,  0.,  0.,  1.])

In [7]: a.reshape((3,3))
Out[7]: 
array([[ 0.,  1.,  0.],
       [ 1.,  0.,  1.],
       [ 0.,  0.,  1.]])

如果需要整数数组,请将a声明为a = np.zeros(9, dtype=int)

答案 1 :(得分:1)

您可以使用列表compreehension:

[[1 if i*10+j in values else 0 for j in range(10)] for i in range(10)]

在这种情况下,我建议您将values创建为一组。

values = set([1, 3, 5, 8])