我有这个简单的问题,但我试图找出原因:
矩阵是否按列存储在 MATLAB 中?如果是,那为什么?
我推测它们是按列存储的,因为内存没有矩形结构,而是将数据存储为位。我在 MATLAB 论坛上找不到有关此问题的任何详细信息。所以我希望有人可以为我提供更多信息。
我有这个简单的问题,但我试图找出原因:
矩阵是否按列存储在 MATLAB 中?如果是,那为什么?
我推测它们是按列存储的,因为内存没有矩形结构,而是将数据存储为位。我在 MATLAB 论坛上找不到有关此问题的任何详细信息。所以我希望有人可以为我提供更多信息。
这是我的评论扩展到答案。
MATLAB 是一种以列为主的编程语言;一旦您知道要查找的内容,在文档中找到它并不难:
https://www.mathworks.com/help/matlab/matlab_external/matlab-data.html#f22019
编程语言中使用的数据结构的布局(最常见的是行优先或列优先)是由编程语言的开发人员在开发过程开始时决定的。这通常是一个品味问题,因为没有一个比另一个有明显的优势。但是,这种选择对用户的性能有潜在的影响;连续访问内存位置比使用(可能很大)跨步访问要快得多。
MATLAB 是一种(最初)设计用于进行线性代数运算/研究的编程语言,主要数据结构是矩阵。MATLAB 中几乎所有的东西都是矩阵;例如,标量是 1×1 矩阵。此外,数学家在做线性代数时通常会考虑列向量,所以我认为这是 MATLAB 的自然选择。
我同意 Wolfgang Bangerth 的观点,即行优先布局对于大多数程序员和大多数编程语言来说可能更自然,但我认为这是因为我们在过去十年中教育程序员的方式。Python 在 Intro to Programming 类中取代了 C/C++(行专业)和 Fortran(列专业)。因此,最流行的专栏主要编程语言之一现在被认为是“旧的”和“不可用的”。此外,MATLAB 既不是免费的也不是开源的,它被设计为一种数学编程语言,而不是通用语言。因此,它的使用(在教育中)仅限于一些科学计算和计算数学课程,作为“友好的”这只是在 MATLAB 中)。
(我知道 MATLAB 有一个广泛的工具箱列表,并且受到工程师的青睐,例如逆运动学。但这与这个答案的论点无关)
最后,过去的选择(用于科学计算)将在 C/C++ 和 Fortran 之间进行。如今,对于大多数应用程序和开发(不包括高性能/并行计算),它介于 NumPy/SciPy(行优先)和 MATLAB/GNU Octave/SciLab(列优先)之间。您可以使用任何一种布局以类似的简单性做几乎您想要的事情,这只是偏好。
有关更多讨论,请参见 en.wikipedia.org/wiki/Row-_and_column-major_order。