1

\ am dealing with a matrix in MATLAB which is sparse and has many rows and columns. In this case, the row and columns of the matrix are the ids for particular items. Let's assume them as id1 and id2.

It would be nice if the ids for rows and columns could be embedded so I can have access to them easily to them without the need for creating extra variables that keep the two ids.

The answer would be probably to use a table data type. Tables are very ideal answer for my need however I was wondering if I could create a table data type for a sparse matrix?

A  [m*n] sparse matrix    %% m & n are huge 
id1 [1*m] , id2 [1*n]     %% two vectors containing numeric ids for rows and column

Could we obtain?

T  [m*n] sparse table matrix

Thanks for sharing your view with me.

4

1 回答 1

2

我将解决问题和评论以消除一些混乱。

简短的回答

Matlab中没有sparse table类。无法做到。使用 sparse() 矩阵。

长答案

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

  1. 从哲学上讲,如果您正在处理大量数据和/或数据稀疏,那么拥有漂亮的行和列标签的优势就会完全丧失。

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

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

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

现在,需要澄清一些误解:

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

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

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

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

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

于 2016-02-02T21:43:12.480 回答