MATLAB中的稀疏table,可能吗?

Sparse table in MATLAB, is it possible?

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

如果可以嵌入行和列的 ID 就好了,这样我就可以轻松访问它们,而无需创建额外的变量来保留这两个 ID。

答案可能是使用 table 数据类型。表格是满足我需要的非常理想的答案,但是我想知道我是否可以为稀疏矩阵创建 table 数据类型?

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 tableclass。无法做到。使用 sparse() 矩阵。

长答案

稀疏 table 毫无意义是有原因的:

  1. 从哲学上讲,拥有漂亮的行和列标签的优势完全是 lost 如果您正在处理大量数据 and/or 如果数据稀疏。

    滚动浏览 246829 行和 33336 列?如果您正在调试代码并且特定的异常值导致您的结果偏离,则只能在非常孤立的时候有用。此外,您可能看到的只是一片零的海洋。

  2. 技术上一个table可以有更多列用于同一个变量,即table(rand(10,2), rand(10,1))是一个有效的table .你会如何考虑在这样的 table 上定义稀疏性?

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

现在,要澄清一些误解

  • 更少的变量意味着 clearer/cleaner 代码。不对。您可能正在考虑 how do I make a series of variables a1, a2, a3, etc..

    的极端情况(在不良实践中)

    冗长与变量数量、注释数量和代码之间存在一个最佳点 clarity/maintainability。只有通过时间和经验,您才能找到合适的平衡点。

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

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

我处理高频价格,这是数 TB 的数据。我还使用其他方法和修复程序扩展了 table() class 以帮助我完成工作(请参阅 https://github.com/okomarov/tableutils),但我看不出稀疏性是如何添加到 table().