\ 正在处理 MATLAB 中的一个矩阵,该矩阵是稀疏的,并且有许多行和列。在这种情况下,矩阵的行和列是特定项的 ID。让我们假设它们是id1
和id2
.
如果可以嵌入行和列的 id,那就太好了,这样我就可以轻松访问它们,而无需创建保留两个 id 的额外变量。
答案可能是使用表数据类型。表是满足我需求的非常理想的答案,但是我想知道是否可以为稀疏矩阵创建表数据类型?
A [m*n] sparse matrix %% m & n are huge
id1 [1*m] , id2 [1*n] %% two vectors containing numeric ids for rows and column
我们能得到吗?
T [m*n] sparse table matrix
感谢您与我分享您的观点。
我将解决该问题和评论,以消除一些混淆。
简短的回答
Matlab中没有sparse table
类。不能。使用 sparse(( 矩阵。
长答案
稀疏表没有意义是有原因的:
-
从哲学上讲,如果您正在使用大型数据面板和/或数据稀疏,那么拥有漂亮的行和列标签的优势将完全丧失。
滚动浏览246829行和 33336 列?只有在调试代码并且特定的异常值导致结果消失时,仅在非常孤立的时间有用。此外,您可能看到的只是零的海洋。
-
从技术上讲,一个表可以为同一变量提供更多列,即
table(rand(10,2), rand(10,1))
是一个有效的表。您如何考虑定义此类表上的稀疏性?好吧,假设您正在使用类似矩阵的表,即每个表单元格一个元素和相同的数字类。尽管如此,没有一个代数运算符是在
table()
上定义的。因此,您需要首先提取内容,以便能够执行跨越多个数据列的任何操作。需要明确的是,一旦数据被提取出来,那么你就有了例如双精度(完整(矩阵,或者在理想情况下是一个双稀疏矩阵。
现在,需要澄清一些误解:
-
更少的变量意味着更清晰/更干净的代码。不对。您可能正在考虑如何创建一系列变量 a1、a2、a3 等的极端情况(在不良实践中(。
在详细程度和变量数量、注释量和代码清晰度/可维护性之间有一个最佳点。只有通过时间和经验,您才能找到适当的平衡。
-
对数据的控制离不开目视检查。这种方法不能随大数据一起扩展,你越早放弃它,你的代码就会越快变得更可靠。您需要系统地验证结果,而不是依赖目视检查。未能(直观地(发现数据中的问题,会随着其维度呈指数级增长,比系统测试更快。
关于我工作的一些背景信息:
我使用高频价格,即数 TB 的数据。我还使用其他方法和修复程序扩展了 table()
类来帮助我完成工作(请参阅 https://github.com/okomarov/tableutils(,但我不明白稀疏性如何成为添加到table()
的有用功能。