稀疏矩阵(Python实现)

目录

什么是稀疏矩阵

稀疏矩阵的存储

示例题目

题目描述

输入/输出描述

代码

代码走读

传送门

测试用例

1. 数据正常且合乎要求:

2. 输入的行数或列数不大于0

3. 输入的行数或列数不是有效数字

4. 输入的元素不是有效数字

5. 稀疏数字占比低于稀疏比率


什么是稀疏矩阵

简单的说,如果一个矩阵中大部分元素为0,就被称为稀疏矩阵。

对于稀疏矩阵而言,实际存储的数据项很少。如果在计算机中采用传统的二维数组(在Python中使用二维列表)来存储稀疏矩阵,就会浪费大量的内存空间来存储0。比如一个10000 X 10000的稀疏矩阵,只有一个元素非0,若采用传统的存储技术,将浪费太多的内存来存储无意义的0。

稀疏矩阵的存储

对于稀疏矩阵,我们只需要记住矩阵中非0元素的位置和值、以及系数矩阵的大小(行数和列数)这些有用信息即可。也就是说,我们可以用一个包含3列的二维数组存储稀疏矩阵中的非0项,记录非0项的所在行、所在列和值信息以及记录稀疏矩阵行数和列数信息。

例如对于下面的3X3稀疏矩阵:

0 0 0
0 0 0
3 0 7

我们用下面的压缩矩阵来存储稀疏矩阵:

3  3 2
2 0 3
2 2 7

上面的压缩矩阵中,第0行(也就是标黄的部分)存储稀疏矩阵的行数(3)、列数(3)和非0项数据的个数(2)。

从第1行开始,存储非0项所在的行数、所在的列数和值。每一行存储一个非0项的信息。


示例题目

题目描述

输入一个稀疏矩阵,打印稀疏矩阵和压缩后的结果。

输入/输出描述

输入描述:

输入矩阵的行数和列数,在输入每一个位置对应的值。

例如下面输入了一个3 X 3的稀疏矩阵:

Input matrix rows: 3
Input matrix columns: 3
Input matrix[0][0]: 0
Input matrix[0][1]: 0
Input matrix[0][2]: 0
Input matrix[1][0]: 34
Input matrix[1][1]: 0
Input matrix[1][2]: 23
Input matrix[2][0]: 0
Input matrix[2][1]: 0
Input matrix[2][2]: 0

输出描述:

输出原矩阵和压缩后的稀疏矩阵:

------matrix------
|	0	0	0	|
|	34	0	23	|
|	0	0	0	|
---------------
After Compress matrix ---> sparse_matrix: 
|	3	3	2	|
|	1	0	34	|
|	1	2	23	|

代码


# 声明稀疏元素和稀疏系数
SPARE_ELEMENT = 0
SPARE_RATE = 0.5

class MatrixError(Exception):
    def __init__(self, message, code):
        self.message = message
        self.code = code


def isSparse(matrix):
    """
    Judge spare matrix.
    :param matrix: matrix
    :return: boolean
    """
    sum = len(matrix) * len(matrix[0])
    spare = 0

    for row in range(len(matrix)):
        for column in range(len(matrix[row])):
            if matrix[row][column] == SPARE_ELEMENT:
                spare += 1

    if spare / sum >= SPARE_RATE:
        return True
    els
  • 7
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值