Python заполняет матрицу конкретными значениями


У меня есть 2D матрица, и я хочу заполнить ее 0 и 1. И у меня есть список, включающий некоторые ценности.

Например:

values = [1, 3, 5, 8]

И я хочу создать эту матрицу

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

Я сделал это с помощью двух вложенных операторов for loop witf if. Значения-это случайные целые числа от 0 до 100. И моя матрица будет 10*10. Есть ли способ сделать это более элегантным?

2 2

2 ответа:

Вы можете использовать понимание списка:

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

Если вы можете использовать NumPy, используйте fancy indexing в плоском виде массива и измените форму:

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