我有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。有没有办法让这更优雅?
答案 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])