建立三元组矩阵,实现矩阵的输入、输出的函数的完整代码
时间: 2024-03-01 12:54:21 浏览: 50
三元组代码
以下是建立三元组矩阵,实现矩阵的输入、输出的函数的完整代码:
```python
# 定义三元组结构体
class Triple:
def __init__(self, row, col, value):
self.row = row
self.col = col
self.value = value
# 定义矩阵类
class SparseMatrix:
def __init__(self, row, col, num):
# 初始化矩阵的行、列、非零元素个数
self.row = row
self.col = col
self.num = num
# 初始化三元组表
self.data = []
for i in range(self.num):
row = int(input("请输入第%d个非零元素的行号:" % (i+1)))
col = int(input("请输入第%d个非零元素的列号:" % (i+1)))
value = int(input("请输入第%d个非零元素的值:" % (i+1)))
self.data.append(Triple(row, col, value))
# 输出矩阵的三元组表
def printMatrix(self):
print("行号\t列号\t值")
for i in range(self.num):
print("%d\t%d\t%d" % (self.data[i].row, self.data[i].col, self.data[i].value))
# 矩阵的转置运算
def transpose(self):
# 初始化转置后的矩阵
t = SparseMatrix(self.col, self.row, self.num)
# 如果原矩阵非空,则进行转置
if self.num > 0:
# 统计每一列的非零元素个数
col_counts = [0 for i in range(self.col)]
for i in range(self.num):
col_counts[self.data[i].col - 1] += 1
# 计算每一列的第一个非零元素在转置后矩阵中的位置
col_starts = [0 for i in range(self.col)]
for i in range(1, self.col):
col_starts[i] = col_starts[i-1] + col_counts[i-1]
# 将原矩阵的每个非零元素插入到转置后矩阵的对应位置
for i in range(self.num):
row = self.data[i].col
col = self.data[i].row
value = self.data[i].value
pos = col_starts[col-1]
t.data.insert(pos, Triple(row, col, value))
col_starts[col-1] += 1
return t
```
其中,`Triple` 类表示三元组结构体,包含三个属性:行号、列号和值。`SparseMatrix` 类表示稀疏矩阵,包含三个属性:行数、列数和非零元素个数。在 `SparseMatrix` 类中,首先通过用户输入建立矩阵的三元组表,然后定义了输出矩阵的三元组表和矩阵转置运算的方法。在矩阵转置运算中,首先统计每一列的非零元素个数和每一列的第一个非零元素在转置后矩阵中的位置,然后将原矩阵的每个非零元素插入到转置后矩阵的对应位置。
阅读全文