1、实验题1,实现稀疏矩阵(三元组表示)的基本运算。 目的:领会稀疏矩阵三元组存储结构及其基本算法设计 。 内容:假设n*n的稀疏矩阵A 采用三元组表示,设计一个程序exp5-1.py实现以下功能。 (1)生成以下两个稀疏矩阵的三元组a 和b。 (2)输出a转置矩阵的三元组。 (3)输出a+b的三元组。 (4)输出a*b的三元组。
时间: 2024-02-13 20:00:27 浏览: 120
以下是一个实现程序exp5-1.py的代码示例,其中包含了稀疏矩阵的基本运算:
```python
import numpy as np
n = 5 # 稀疏矩阵的大小
# 生成稀疏矩阵a的三元组
nnz_a = n * 2 # 非零元素的数量
rows_a = np.random.randint(n, size=nnz_a)
cols_a = np.random.randint(n, size=nnz_a)
vals_a = np.random.rand(nnz_a)
a = np.zeros((n, n))
for i in range(nnz_a):
a[rows_a[i], cols_a[i]] = vals_a[i]
# 生成稀疏矩阵b的三元组
nnz_b = n * 2 # 非零元素的数量
rows_b = np.random.randint(n, size=nnz_b)
cols_b = np.random.randint(n, size=nnz_b)
vals_b = np.random.rand(nnz_b)
b = np.zeros((n, n))
for i in range(nnz_b):
b[rows_b[i], cols_b[i]] = vals_b[i]
# 输出稀疏矩阵a的三元组
print("稀疏矩阵a的三元组:")
data_a = []
for i in range(n):
for j in range(n):
if a[i, j] != 0:
data_a.append((i, j, a[i, j]))
for i in range(len(data_a)):
print("({}, {}, {:.2f})".format(data_a[i][0], data_a[i][1], data_a[i][2]))
# 输出稀疏矩阵a的转置矩阵的三元组
print("稀疏矩阵a的转置矩阵的三元组:")
data_a_t = []
for i in range(n):
for j in range(n):
if a[j, i] != 0:
data_a_t.append((i, j, a[j, i]))
for i in range(len(data_a_t)):
print("({}, {}, {:.2f})".format(data_a_t[i][0], data_a_t[i][1], data_a_t[i][2]))
# 输出稀疏矩阵a+b的三元组
print("稀疏矩阵a+b的三元组:")
data_ab = []
for i in range(n):
for j in range(n):
if a[i, j] + b[i, j] != 0:
data_ab.append((i, j, a[i, j] + b[i, j]))
for i in range(len(data_ab)):
print("({}, {}, {:.2f})".format(data_ab[i][0], data_ab[i][1], data_ab[i][2]))
# 输出稀疏矩阵a*b的三元组
print("稀疏矩阵a*b的三元组:")
data_ab_mul = []
for i in range(n):
for j in range(n):
s = 0
for k in range(n):
s += a[i, k] * b[k, j]
if s != 0:
data_ab_mul.append((i, j, s))
for i in range(len(data_ab_mul)):
print("({}, {}, {:.2f})".format(data_ab_mul[i][0], data_ab_mul[i][1], data_ab_mul[i][2]))
```
在上面的代码中,我们首先定义了稀疏矩阵的大小n,并使用numpy库中的random模块生成了两个随机的稀疏矩阵a和b。然后,我们输出了稀疏矩阵a的三元组,以及它的转置矩阵、和、积的三元组。
你可以将上面的代码保存为exp5-1.py文件,并在命令行中运行该文件来测试程序的输出结果。
阅读全文
相关推荐







