MATLAB 中的稀疏表,可能吗?



\ 正在处理 MATLAB 中的一个矩阵,该矩阵是稀疏的,并且有许多行和列。在这种情况下,矩阵的行和列是特定项的 ID。让我们假设它们是id1id2.

如果可以嵌入行和列的 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(( 矩阵。

长答案

稀疏表没有意义是有原因的:

  1. 从哲学上讲,如果您正在使用大型数据面板和/或数据稀疏,那么拥有漂亮的行和列标签的优势将完全丧失

    滚动浏览246829行和 33336 列?只有在调试代码并且特定的异常值导致结果消失时,仅在非常孤立的时间有用。此外,您可能看到的只是零的海洋。

  2. 从技术上讲,一个表可以为同一变量提供更多列,即 table(rand(10,2), rand(10,1))是一个有效的表。您如何考虑定义此类表上的稀疏性?

    好吧,假设您正在使用类似矩阵的表,即每个表单元格一个元素和相同的数字类。尽管如此,没有一个代数运算符是在table()上定义的。因此,您需要首先提取内容,以便能够执行跨越多个数据列的任何操作。需要明确的是,一旦数据被提取出来,那么你就有了例如双精度(完整(矩阵,或者在理想情况下是一个双稀疏矩阵。

现在,需要澄清一些误解

  • 更少的变量意味着更清晰/更干净的代码。不对。您可能正在考虑如何创建一系列变量 a1、a2、a3 等的极端情况(在不良实践中(。

    在详细程度和变量数量、注释量和代码清晰度/可维护性之间有一个最佳点。只有通过时间和经验,您才能找到适当的平衡。

  • 对数据的控制离不开目视检查。这种方法不能随大数据一起扩展,你越早放弃它,你的代码就会越快变得更可靠。您需要系统地验证结果,而不是依赖目视检查。未能(直观地(发现数据中的问题,会随着其维度呈指数级增长,比系统测试更快。

关于我工作的一些背景信息:

我使用高频价格,即数 TB 的数据。我还使用其他方法和修复程序扩展了 table() 类来帮助我完成工作(请参阅 https://github.com/okomarov/tableutils(,但我不明白稀疏性如何成为添加到table()的有用功能。

相关内容

  • 没有找到相关文章

最新更新