【发布时间】:2018-06-12 14:54:48
【问题描述】:
如何使用 python 创建这个矩阵?
我已经创建了 S 、 T 、 X 、W 、Y 和 Z 以及 L 的第一行和最后一行。
【问题讨论】:
标签: python
如何使用 python 创建这个矩阵?
我已经创建了 S 、 T 、 X 、W 、Y 和 Z 以及 L 的第一行和最后一行。
【问题讨论】:
标签: python
类似这样的东西(这是草稿!)。创建一个存储 3 个列表(对角线、上对角线和下对角线)的类,并公开一种编辑这些值的方法。
class TBMatrix:
def __init__(self,size):
self._size = size #Has to be square I guess?
self._diagonal = [None for i in range(0,size)]
self._upper_diagonal = [None for i in range(0,size - 2)]
self._lower_diagonal = [None for i in range(0,size - 2)]
def get(self,row,col):
if row == col:
return self._diagonal[row]
if row == col - 1:
return self._lower_diagonal[col]
if row == col + 1:
return self._upper_diagonal[row]
return 0 #or None, if you want a matrix that contains objects
def set(self,row,col,value):
if row == col:
self._diagonal[row] = value
elif row == col - 1:
self._lower_diagonal[col] = value
elif row == col + 1:
self._upper_diagonal[row] = value
else:
#No effect, maybe you want to throw an exception?
pass
这是一个快速草稿,您需要进行大量检查以确保没有尝试分配超出列表大小的索引。但这应该可以帮助您入门。
另一种方法是覆盖__getitem__ 和__setitem__ 以返回一个满是0 或None 的行,除非它需要为self._diagonal、self._upper_diagonal 和self._lower_diagonal 保留一个位置。但这似乎更复杂。
【讨论】: