MATLAB中行与列数据表示的优点

时间:2016-06-07 13:06:26

标签: matlab row

我正在编写一个MATLAB工具箱,我需要存储大量的矢量值数据点(10 ^ 4到10 ^ 5)。 我可以将这些数据点存储在D-by-N矩阵或N-by-D矩阵中,其中D是数据的维数,N是数据点的总数。

许多MATLAB函数假定采用N-by-D表示(例如covkmeans),因此我假设它是默认表示,我会遵循它。

是否有任何理由支持MATLAB中的D-by-N表示?

我在问,因为我见过很多人在MATLAB中使用D-by-N表示。

1 个答案:

答案 0 :(得分:4)

MATLAB使用矩阵的column-major表示。这意味着内存中的连续值沿列向下。这也符合MATLAB的线性索引。因此,如果您有N - by - D矩阵M,那么元素M(x,y)M(x+1,y)将存储在连续的内存插槽中,而{{1 }}和M(x,y) M(x,y+1)在内存中相互远离N。因此,如果您想要提取某个功能的所有数据点,那么使用N - by - D配置意味着所有这些数据点都会连续存储在内存中 - 就像您想要提取所有数据点一样单个观察的特征,然后它们不会(但是在D - by - N中。所以问题是你更有可能做什么?请记住,默认情况下,典型的MATLAB函数对行进行操作,因此您可以使用mean(M),获得N中每个维度的平均值 - by - D但你会得到D - by - N案例中维度的单一观察的平均值,我认为这不太可能是一个有用的衡量标准。

D - by - N的情况可能归结为线性代数。如果要对数据进行矩阵乘法(许多矢量化算法都会这样做),那么您可能希望以最小化转换这些数据所需次数的方式存储它们。我怀疑这就是您看到D - by - N表示的原因,因为M将用于需要D的线性代数公式 - by - {{ 1}}因而避免了转置。