我需要在python中建立一个对象矩阵。我发现了各种语言的其他解决方案,但是找不到在python中执行此操作的可靠而有效的方法。
给班上
class Cell():
def __init__(self):
self.value = none
self.attribute1 = False
self.attribute2 = False
我想尽可能有效地制作多个“单元”的矩阵。由于矩阵的大小将比20乘20大,因此迭代方法将很有用。任何贡献都是有帮助的
答案 0 :(得分:2)
如果您已经定义了对象,列表理解可以在以下方面提供帮助:
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 full
方法,并通过填充了您的值的n
numpy数组生成m
:
mat = numpy.full((num_rows, num_cols), Cell())
可以找到文档here
答案 1 :(得分:0)
也许只是使用嵌套列表?
类似的东西:
mtx = [[0, 1, 2], [3, 4, 5]]
mtx[1][1] # 4
编辑: 您可以使用append方法将元素添加到列表中。
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())
答案 2 :(得分:0)
如果您事先知道矩阵的大小,则可以使用np.empty
或np.zeros
初始化一个numpy数组,然后使用索引来填充单元格。
或者您可以将项目追加到列表中,然后通过np.array(list)
转换为数组。
您需要将矩阵作为一个numpy数组,以便进行任何计算。
答案 3 :(得分:0)
Size = 20
Matrix = np.zeros((Size, Size))
for x in range(0, Size):
for y in range(0, Size):
Matrix[x][y] = Cell()