用Python填充矩阵的特定值

3

我可以帮助将以下it技术相关内容进行翻译:我有一个二维矩阵,想要填充0和1。同时我有一个包含若干值的列表。

例如:

values = [1, 3, 5, 8]

我想创建这个矩阵

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

我用两个嵌套的for循环加if语句来创建这个矩阵。数值是从0到100的随机整数。我的矩阵将会是10*10的。有没有更优雅的方法来创建此矩阵呢?

2个回答

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.]])

如果你想要一个整数数组,声明aa = np.zeros(9, dtype=int)

为了使其更具动态性,a = np.zeros(values.max()) - Jérôme
@Jérôme,这只适用于values是一个NumPy数组且所需的数组在其右下角具有1(例如,在此示例中,values.max()为9),否则a将没有足够的元素以正确地进行重塑。 - xnx
正确。无论如何,尺寸从一开始就是已知的,因此我的评论毫无意义。 - Jérôme
我宁愿不使用numpy。因为我想在我的代码中使用Python列表,而不是Numpy数组。但是你的答案很好知道,我会记住这个答案以备将来之需。非常感谢。 - fatiherdem

2
您可以使用列表推导式:
```python ```
[[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])

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接