首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何循环遍历n维稀疏矩阵(由自己的类创建)?

循环遍历n维稀疏矩阵可以通过递归的方式实现。首先,我们需要创建一个自定义的类来表示稀疏矩阵,并在该类中定义一个递归方法来遍历矩阵的所有元素。

以下是一个示例的实现:

代码语言:txt
复制
class SparseMatrix:
    def __init__(self, matrix):
        self.matrix = matrix

    def traverse(self, matrix=None, indices=None):
        if matrix is None:
            matrix = self.matrix
            indices = []

        if isinstance(matrix, list):
            for i, item in enumerate(matrix):
                indices.append(i)
                self.traverse(item, indices)
                indices.pop()

        else:
            print("Index:", indices, "Value:", matrix)

# 创建一个3维稀疏矩阵
matrix = [
    [
        [1, 0, 0],
        [0, 2, 0],
        [0, 0, 3]
    ],
    [
        [4, 0, 0],
        [0, 5, 0],
        [0, 0, 6]
    ]
]

# 创建稀疏矩阵对象
sparse_matrix = SparseMatrix(matrix)

# 遍历稀疏矩阵
sparse_matrix.traverse()

上述代码中,我们首先定义了一个SparseMatrix类,该类接受一个稀疏矩阵作为参数,并将其存储在self.matrix属性中。然后,我们定义了一个traverse方法,该方法使用递归的方式遍历矩阵的所有元素。

traverse方法中,我们首先检查当前元素是否为列表类型。如果是列表类型,则表示当前维度还未遍历完全,我们需要继续递归遍历下一维度的元素。在递归调用之前,我们将当前维度的索引添加到indices列表中,以便在打印元素时能够显示其索引路径。在递归调用之后,我们需要将当前维度的索引从indices列表中移除,以便在返回到上一层递归时,能够正确地遍历下一个元素。

如果当前元素不是列表类型,则表示已经到达最内层的元素,我们可以直接打印其索引路径和值。

使用上述示例代码,我们可以遍历任意维度的稀疏矩阵,并打印出每个元素的索引路径和值。对于更高维度的稀疏矩阵,只需要在创建稀疏矩阵对象时传入相应的矩阵即可。

关于腾讯云相关产品和产品介绍链接地址,由于要求不能提及具体的云计算品牌商,我无法给出相关链接。但是,腾讯云提供了丰富的云计算产品和解决方案,您可以通过访问腾讯云官方网站,查找相关产品和文档来了解更多信息。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Lua数据结构

例如,可以使用如下代码来创建一个全0元素NM矩阵: local mt = {} for i = 1 , N do local row = {} mt[i] = row for j = 1,...在这种方式下,我们可以使用以下代码来创建一个全0元素NM矩阵: local mt = {} for i = 1, N do local aux = (i -1) * M for j = 1,...许多有关数据结构书籍都会深入地讨论如何实现这种稀疏矩阵而不必浪费800MB内存空间,但在Lua语言中却很少需要用到那些技巧。这是因为,我们使用表实现数组而表本来就是稀疏。...对于大多数针对稀疏矩阵操作来说,遍历空元素是非常低效。相反,可以使用pairs来只遍历非nil元素。例如,考虑如何进行不规则数组表示稀疏矩阵矩阵乘法。...对于使用不规则矩阵实现稀疏矩阵,内层循环会有问题。由于内层循环遍历是一列b而不是一行,因此不能再此处使用pairs:这个循环必须遍历每一行来检查对应行是否在对应列中有元素。

88420

【数据结构】数组和字符串(九):稀疏矩阵链接存储:十字链表插入、查找、删除操作

对角矩阵压缩存储 【数据结构】数组和字符串(二):特殊矩阵压缩存储:对角矩阵——一数组 b~c....稀疏矩阵压缩存储——三元组表   对于稀疏矩阵压缩存储,由于非零元素个数远小于零元素个数,并且非零元素分布没有规律,无法简单地利用一数组和映射公式来实现压缩存储。...关于循环链表: 【数据结构】线性表(三)循环链表各种操作(创建、插入、查找、删除、修改、遍历打印、释放内存空间) 在稀疏矩阵十字链表中,每一行和每一列都有一个表头节点。...十字链表创建遍历打印、销毁 【数据结构】数组和字符串(八):稀疏矩阵链接存储:十字链表创建遍历打印(按行、按列、打印矩阵)、销毁 1....从第一行开始遍历稀疏矩阵每一行: 通过行表头节点数组获取当前行行链表头节点。 遍历当前行行链表,直到找到要查找节点或遍历完整个链表。

4610
  • 【数据结构】数组和字符串(八):稀疏矩阵链接存储:十字链表创建、插入元素、遍历打印(按行、按列、打印矩阵)、销毁

    4.2.1 矩阵数组表示 【数据结构】数组和字符串(一):矩阵数组表示 4.2.2 特殊矩阵压缩存储   矩阵是以按行优先次序将所有矩阵元素存放在一个一数组中。...对角矩阵压缩存储 【数据结构】数组和字符串(二):特殊矩阵压缩存储:对角矩阵——一数组 b~c....三角、对称矩阵压缩存储 【数据结构】数组和字符串(三):特殊矩阵压缩存储:三角矩阵、对称矩阵——一数组 d....关于循环链表: 【数据结构】线性表(三)循环链表各种操作(创建、插入、查找、删除、修改、遍历打印、释放内存空间) 在稀疏矩阵十字链表中,每一行和每一列都有一个表头节点。...); } } 从第一行开始遍历稀疏矩阵每一行: 打印当前行行号。

    12010

    【数据结构】数组和字符串(十):稀疏矩阵链接存储:十字链表矩阵操作(加法、乘法、转置)

    稀疏矩阵压缩存储——三元组表   对于稀疏矩阵压缩存储,由于非零元素个数远小于零元素个数,并且非零元素分布没有规律,无法简单地利用一数组和映射公式来实现压缩存储。...关于循环链表: 【数据结构】线性表(三)循环链表各种操作(创建、插入、查找、删除、修改、遍历打印、释放内存空间) 在稀疏矩阵十字链表中,每一行和每一列都有一个表头节点。...十字链表基本操作 【数据结构】数组和字符串(八):稀疏矩阵链接存储:十字链表创建遍历打印(按行、按列、打印矩阵)、销毁 【数据结构】数组和字符串(九):稀疏矩阵链接存储:十字链表插入、查找、...创建一个新稀疏矩阵作为结果。 从第一行开始遍历两个矩阵每一行: 获取第一个矩阵当前行行链表头节点和第二个矩阵当前行行链表头节点。...创建一个新稀疏矩阵作为结果。 从第一行开始遍历第一个矩阵每一行: 遍历第二个矩阵每一列: 初始化一个变量用于存储两个节点值乘积累加和。

    7110

    数据结构——全篇1.1万字保姆级吃透串与数组(超详细)

    7.最后 1.串概述 串,也称为字符串,是一个种特殊线性表,nn>=0)个字符组成有序序列。...) { int n = Math.min(curlen, str.curnlen) ; // 获得最短串长度 int k = 0 ; // 循环遍历k char...稀疏因子:用于确定稀疏矩阵个数指标 常见2种存放方式:三元组表存储、十字链表存储         6.2相关及其操作                 6.2.1概述 使用三元组唯一标识一个非零元素...* return 转置后稀疏矩阵对象 */ public SparseMatrix transpose() { //转置 // 1 根据元素个数,创建稀疏矩阵 SparseMatrix...6.4三元组表存储:快速矩阵转置                 6.4.1定义 假设:原稀疏矩阵N、其三元组顺序表为TN,N转置矩阵为M,其对应三元组顺序表为TM。

    1.8K60

    Python 算法高级篇:图表示与存储优化

    本文将详细介绍图基本概念、不同表示方法,以及如何在 Python 中实现它们。 ❤️ ❤️ ❤️ 1. 什么是图? 图是节点(顶点)和它们之间边组成抽象数据结构。...以下是两种常见图表示方法: 3.1. 临接矩阵表示 临接矩阵是一个二数组,其中行和列分别表示图节点。...临接矩阵优点: 适用于稠密图(边数量接近节点数量平方)。 可以进行快速节点之间边查找和更新操作。 临接矩阵缺点: 浪费空间,对于稀疏图,很多位置都是空。 难以表示带有循环图。 3.2....邻接矩阵压缩表示 对于稀疏图,可以使用邻接矩阵压缩表示,如稀疏矩阵或邻接列表数组,以减少空间消耗。 4.2. 邻接表哈希表表示 使用哈希表来表示邻接表,以加速节点之间边查找。 5....使用示例 让我们通过一个简单示例来演示如何在 Python 中表示图。我们将创建一个无向图,并使用邻接表表示法。

    31230

    Java数组

    ---- 五、多维数组 多维数组实质意义上就是数组嵌套使用 比如二数组中元素不是数字而是另一个数组 创建一个多维数组: int[][] = new int[5][2]; 第一个中括号表示最外层数组长度为...简易分析图: 二数组嵌套两层 n数组嵌套n层 以此类推 拓展:稀疏数组 定义:若一个数组中含有大量0元素,相同元素。...使用案例: 多维数组压缩和读取 左边是原始数组 右边为压缩后稀疏数组也叫稀疏矩阵 稀疏矩阵参数: row 表示数组行下标 第一行row表示整个数组总共有多少行 col 表示数组列下标 第一行...确定了有效元素后 便可以创建稀疏数组列表了 按照列表格式创建列表头: 总共有3列值 分别是 行 列 值 稀疏数组总共有多少行取决于原数组有效元素有多少个 在这个基础上要加上列表头那一行 所以就是...代码如下: ---- 六、Arrays 数组工具Java.until.Arrays 为数组对象提供一些简单操作 Arrays常用方法: 1.

    1.8K30

    Java基础入门笔记04——方法调用,方法重载,命令行参数,可变参数,多维数组,Arrays,冒泡排序,矩阵压缩存储

    可以把数组看成java一个,新建数组可以看成数组实例对象,数组中每个元素相当于该对象成员变量。...那每一轮比较都是在浪费时间,如何优化呢?...---- 稀疏数组——压缩存储 对于一个空数据较多矩阵,需要压缩存储节省空间 步骤: 记录数组几行几列,有多少个不同值,假设有n个不同数。...稀疏数组只有3列,n+1行(第一行放原数组行数,列数,不同值个数) 后面的n行放,n个不同数值具体位置和值 package methodStudy; public class Demo08 {...System.out.print(anInt+"\t"); } System.out.println(); } // 稀疏数组还原成原数组

    70530

    【数据结构】数组和字符串(七):特殊矩阵压缩存储:三元组表转置、加法、乘法操作

    稀疏矩阵压缩存储——三元组表   对于稀疏矩阵压缩存储,由于非零元素个数远小于零元素个数,并且非零元素分布没有规律,无法简单地利用一数组和映射公式来实现压缩存储。...使用一个循环遍历输入矩阵所有元素: 对于每个元素,将其行号作为转置后矩阵列号,列号作为转置后矩阵行号,并将值保持不变。 将转置后元素插入到result中。...通过比较当前元素行号和列号,以及使用循环遍历方式,将两个输入矩阵元素逐个比较并进行相应操作: 如果第一个矩阵元素在行号和列号上小于第二个矩阵元素,将第一个矩阵元素插入到result...使用initTable函数初始化result,将其行数设置为第一个输入矩阵行数,列数设置为第二个输入矩阵列数。 创建一个临时数组matrix,用于存储两个输入矩阵相乘结果。...将matrix中所有元素初始化为0。 使用两个嵌套循环遍历第一个输入矩阵所有元素: 对于每个元素,使用另一个嵌套循环遍历第二个输入矩阵所有元素。

    7610

    软考中级(软件设计师)——数据结构与算法(上午10分题)(下午15分)

    软考中级(软件设计师)——数据结构与算法(上午10分题)(下午15分) ---- 目录 软考中级(软件设计师)——数据结构与算法(上午10分题)(下午15分) 数组与矩阵(★★) 稀疏矩阵 线性表(★...★★★★) 链表基本操作 队列与栈 广义表(★★) 二叉树遍历 反向构造二叉树 哈夫曼树 图(★★) 完全图 拓扑排序 时间复杂度与空间复杂度(★★★★★)  深度优先·广度有限 ---- 数组与矩阵...一数组a[n]:a[i]存储地址为: a+i*len 二数组a[m][n]: a[i][j]存储地址(按行存储)为: a+(i*n+j)*len a[i][j]存储地址(按列存储)为: a...需要使用:a+(i*n+j)*len,其中len是两个字节,故而是2,带入公式可得: a+(2*5+3)*2=a+26  稀疏矩阵 线性表(★★★★★) 顺序表:一数组 链表:单链表、循环链表、双向链表...树与二叉树(★★★★★) 结点度 树度 叶子结点 分支结点 内部结点 父结点 子结点 兄弟结点 层次(也叫树深度) 满二叉树、完全二叉树、非完全二叉树,三

    62810

    C++ 特殊矩阵压缩算法

    对称矩阵上三角和下三角区域中元素是相同,以nn数组存储时,会浪费近一半空间,可以采压缩机制,将 二数组中数据压缩存储在一个一数组中,这个过程也称为数据线性化。...现假设有 m行n矩阵,其中所保存元素个数为 c,则稀疏因子为:e=c/(m*n)。当用二数组存储稀疏矩阵中数据时,仅有少部分空间被利用,可以采用压缩机制来进行存储。...如果仔细观察,可发现得到新三元组表是对原B稀疏表以列优先遍历结果。 B稀疏矩阵三元组表显然应该是以行优先遍历结果。...对A稀疏矩阵按列遍历时,可以发现,扫描时,数据出现顺序和其在B三元组表中存储顺序是一致。...总结 使用二数组存储矩阵中数据时,如果矩阵有效数据较小时,可以采用压缩方式对其进行存储。本文着重讲解如何使用三元组表方式压缩存储稀疏矩阵

    1.9K30

    【数据结构】串与数组

    (一) 4.5.3 数组顺序存储(二) 4.5.4 特殊矩阵概述 4.5.5 对称矩阵压缩存储【重点】 4.5.6 三角矩阵 4.5.7 对角矩阵 4.6 稀疏矩阵 4.6.1 定义&存储方式 4.6.2...串与数组 4.1 串概述 串,也称为字符串,是一个种特殊线性表,nn>=0)个字符组成有序序列。 名词解释 长度:包含字符个数n。...// 循环遍历k    char[] s1 = strvalue;    char[] s2 = str.strvalue;    while(k < n) {        if(s1[k]...} 4.6 稀疏矩阵 4.6.1 定义&存储方式 稀疏矩阵:具有较多零元素,且非零元素分布无规律矩阵。...三元组表存储:快速矩阵转置 1)定义 假设:原稀疏矩阵N、其三元组顺序表为TN,N转置矩阵为M,其对应三元组顺序表为TM。

    3.9K10

    数据结构(5):数组

    数组是 nn≥1)个相同类型数据元素构成有限序列,每个数据元素称为一个数组元素,每个元素在 n 个线性关系中序号称为该元素下标,下标的取值范围称为数组界。...稀疏矩阵 ? 矩阵中非零元素个数为 t,相对矩阵元素个数 s 来说非常少,即 s>>t 矩阵称为稀疏矩阵。例如,一个矩阵阶为 100×100,该矩阵中只有少于 100 个非零元素。...给定一个 n×n 矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。你必须在原地旋转图像,这意味着你需要直接修改输入矩阵。请不要使用另一个矩阵来旋转图像。...题目中要求我们尝试不使用额外内存空间情况下进行矩阵旋转,也就是说,我们需要“原地旋转”这个矩阵。那么我们如何在方法一基础上完成原地旋转呢?...当我们知道了如何原地旋转矩阵之后,还有一个重要问题在于:我们应该枚举哪些位置(row,col)进行上述原地交换操作呢?

    93810

    邂逅数组与队列

    数据结构与算法一 线性结构与非线性结构 稀疏数组及五子棋问题 二数组与稀疏数组转化 遍历数组两种方式 队列和银行排队问题 银行排队问题 队列与队列模拟 队列 循环队列 学习完部分大数据知识之后...直接后继元素 常见非线性结构有: 数组(二or多维), 广义表, 树结构, 图结构 稀疏数组及五子棋问题 需求 如何保存五子棋记录?...遍历原始二数据, 得到有效数据个数sum * 2. 根据sum创建稀疏数组 sparseArray[sum+1][3], 3代表列数且为固定 * 3....队列 数组模拟队列代码 在创建队列这个实体时, 需要一个构造函数, 构造函数无返回值....将临时保存变量返回 数据遍历显示时 for (int i = front; i < front+circleQueueSize(); i++), 注意i初始值和结束值 创建一个循环队列实体, 且有效数据长度为

    54910

    软件设计(十一)数据结构(上)

    常用链表结构: 1)双向链表:每个节点包含两个指针,指明直接前趋和后继,可在两个方向遍历链表。 2)循环链表:表尾指针指向第一个节点。 3)静态链表:借助数组来描述线性表链式存储结构。...二、数组、矩阵和广义表 1、数组 n数组是一种“同构”数据结构,其每一个元素类型相同,结构一致。数组是定长线性表在数上扩张,即线性表中元素又是一个线性表。...因为计算机内存结构是一线性,因此存储多维数组时必须按照某种方式进行降处理。 2、矩阵 特殊矩阵:若矩阵中元素(或非0元素)分部有一定规律,则为特殊矩阵。...(如 三角矩阵、对称矩阵、对角矩阵稀疏矩阵:若非零元素远远小于零元素个数,且非零元素分部没有规律,则为稀疏矩阵。...4、有向完全图:有n个顶点有向完全图中孤数目为n(n-1),即任何两个不同顶点之间都有方向相反两条弧存在。 等... 图遍历分为: 1、深度优化遍历 DFS:从图G任意一个顶点v出发。

    36720

    稀疏矩阵转置

    矩阵是线性代数中一个知识,刚开始学习时候可能感觉不到它有什么用处,最初感觉就是对二数据操作。其实现实生活中矩阵用处太大了,设计领域相当广泛。...在此只讨论稀疏矩阵转置问题; 可能看到矩阵就会想到二数组,比如这样一个矩阵: ?...,而且又是稀疏矩阵,这样做就可以节省很大空间。...我们在转置矩阵时候会需要一个数组来保存转置后矩阵,定义为: struct juzhen b[MAX_TERM];//转置后矩阵 主要思想,两层循环,第一层循环控制矩阵行,第二层循环控制数组a行...有没有办法让两层循环变成一层循环呢?付出空间上代价,换取时间效率; 我们只用一层循环遍历数组a中所有元素,并把该元素放到指定位置。这样我们就需要一个数组star来存放第i个元素所在位置。

    1.6K10

    专访 | 基于LSTM与TensorFlow Lite,kika输入法是如何造就

    这种方法不会像 one-hot 编码那样使用超高向量表示一个词,可以说词嵌入将词表征|V|减少到几百,其中|V|表示词汇数量。...因为任何秩为 n 矩阵都可以 n 个线性不相关向量或基表示出来,完整词嵌入矩阵也就能过完备基线性组合表示。...kika 使用标量量化算法基本思路是,对于每一个 m×n 权重矩阵 W,首先将其转化为包含 m×n 个元素向量 w。...然后再对该权重向量元素聚为 k 个集群,这可借助经典 k 均值聚算法快速完成: ? 现在,我们只需储存 k 个聚中心 c_j,而原权重矩阵只需要记录各自聚中心索引就行。...上半部分权重矩阵可以取聚中心,并储存在 centroids 向量中,随后原来权重矩阵只需要很少空间储存对应索引。

    1.2K50

    矩阵三种存储方式---三元组法 行逻辑链接法 十字链表法

    ); } } 行逻辑链接顺序表   使用三元组顺序表存储稀疏矩阵,我们每次访问其中一个元素都要遍历整个矩阵,效率比较低。...下图为一个稀疏矩阵,当使用行逻辑链接顺序表对其进行压缩存储时,需要做以下两个工作: ?   1.将矩阵非 0 元素采用三元组形式存储到一数组 data 中: ?   ...2.使用数组 rpos 记录矩阵中每行第一个非 0 元素在一数组中存储位置。 ?   通过以上两步操作,即实现了使用行逻辑链接顺序表存储稀疏矩阵。   ...例如,提取图 1 稀疏矩阵元素 2 过程如下:    rpos 数组可知,第一行首个非 0 元素位于data[1],因此在遍历此行时,可以直接从第 data[1] 位置开始,一直遍历到下一行首个非...元素所在位置(data[4])之前;遍历第三行时, rpos 数组可知,此行首个非 0 元素位于 data[4],由于这是矩阵最后一行,因此一直遍历到 rpos 数组结束即可(也就是 data[

    1.3K40

    揉捻Map-疯狂Java

    具有n个节点完全图有n(n-1)/2条边。 稀疏图和稠密图(Sparse Graph and Dense Graph):稀疏图指的是边数量 相对较少图,而稠密图指的是边数量相对较多图。...表示方法 邻接矩阵(Adjacency Matrix): 邻接矩阵是一个二数组,用于表示图中节点之间连接关系。矩阵行和列分 别对应图中节点,在相应位置上使用0或1表示节点之间是否有边相连。...优点: 邻接矩阵易于理解和实现。 可以快速查找节点之间是否有边相连,时间复杂度为O(1)。 适用于稠密图。 缺点: 对于大规模稀疏图,邻接矩阵会占用较大存储空间。...关联矩阵(Incidence Matrix): 关联矩阵是一个二数组,用于表示图中节点和边之间关联关系。矩阵行 表示节点,列表示边,当节点与边相连时,相应位置上使用1表示。...有些算法适用于全 局图分析,如图遍历和图搜索算法;有些算法适用于局部图分析,如图聚和图 中心性算 代码实现 该代码包括图创建、添加边、获取邻居节点等基本操作: import java.util.ArrayList

    18820

    SciPy 稀疏矩阵(4):LIL(上)

    至于如何优化线性代数矩阵运算操作效率,继续改进三元组存储方式可能不好办了,需要换一种存储方式。...因此,对于内容创作者来说,掌握矩阵运用技巧,可以让自己创作更具表现力和说服力。 在数学和物理中,向量组是一个非常重要概念。...矩阵若干行和若干列组成数组,而向量组则是若干向量组成集合。矩阵每一行可以看作是一个向量,而向量组中每个向量也可以看作是一个行向量。此外,矩阵秩与向量组秩也有着密切联系。...与此同时,针对稀疏向量我们还可以添加一些功能,比如获取向量数、二元组索引重复该如何处理等等。...与此同时,针对稀疏向量我们还可以添加一些功能,比如获取向量数、多个二元组索引重复该如何处理等等。

    18910
    领券