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 ответа:
Вы можете использовать понимание списка:
[[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)
.