Создание матрицы объектов в python - PullRequest
0 голосов
/ 07 ноября 2018

Мне нужно сделать матрицу объектов в Python. Я нашел другие решения на разных языках, но не могу найти надежный и эффективный способ сделать это в Python.

Учитывая класс

class Cell():
    def __init__(self):
        self.value = none 
        self.attribute1 = False
        self.attribute2 = False

Я хочу сделать матрицу из нескольких «ячеек» максимально эффективной. Поскольку размер матрицы будет больше 20 на 20, был бы полезен итерационный метод. Любые вклады полезны

Ответы [ 4 ]

0 голосов
/ 07 ноября 2018
Size = 20
Matrix = np.zeros((Size, Size))

for x in range(0, Size):
    for y in range(0, Size):
        Matrix[x][y] = Cell()
0 голосов
/ 07 ноября 2018

Если вы заранее знаете, какого размера ваша матрица, вы можете инициализировать пустой массив, используя np.empty или np.zeros, а затем заполнить ячейки с помощью индексации.

Или вы можете добавить элементы в списки, а затем преобразовать в массив np.array(list). Вам понадобится ваша матрица в виде массива для любых вычислений, которые вы делаете.

0 голосов
/ 07 ноября 2018

Если вы уже определили свои объекты, списочные списки могут помочь здесь:

num_rows = 5
num_cols = 6

row = [Cell()]*num_rows
# The original way doesn't behave exactly right, this avoids 
# deep nesting of the array. Also adding list(row) to create
# a new object rather than carrying references to row to all rows
mat = [list(row) for i in range(num_cols)]

#[[Cell(), Cell(), Cell()...], [...], ..., [Cell(), ..., Cell()]]

Вы можете обернуть их в numpy.array, если хотите, также

Массив NumPy заполнен

Вы также можете использовать встроенный метод numPy full, который генерирует массив NumPy n by m, заполненный вашими значениями:

mat = numpy.full((num_rows, num_cols), Cell())

Документацию можно найти здесь

0 голосов
/ 07 ноября 2018

Может быть, просто использовать вложенные списки?

Что-то вроде:

mtx = [[0, 1, 2], [3, 4, 5]]
mtx[1][1] # 4

Edit: Вы можете добавлять элементы в список, используя метод добавления.

the_list = []
for item in iterator_or_something:
    the_list.append(Cell(item.a, item,b))

Если это фиксированный размер, и вы знаете это:

the_list = []
for x in range(0, 500):
    the_list.append(Cell())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...