2013-06-25 218 views

回答

6

如果尺寸行为要一致,就必须发生这种情况。我们考虑一个大小为1xn或nx1的向量。当然,方向很重要,否则MATLAB可以简单地告诉你矢量的长度为n。在后一种情况下,有一个尾随的单身维度,所以隐含地存在无限多的尾随单身维度。因此,列向量的大小实际上是nx1x1x1 ...,行向量的大小是1xnx1x1 ...

标量也是如此。如果标量大小为1x1,那么它的大小必须为1x1x1x1x ...

大小必须告诉您一个对象的大小,但它应该停止在哪里?我想如果你是从头开始重新设计MATLAB,你可能会决定不报告任何尾随的单例尺寸。所以一个列向量将被报告为维度n,但是维度为1xn的行向量?说实话,我实际上更喜欢被告知一个列向量具有维度nx1。但那么它必须在逻辑上是维nx1x1x1 ...

无论如何,很久以前,MATLAB不允许你在数组中超过两维索引。更高维的数组在这里至少有20年左右的历史,但仍有许多遗留代码仍然有用。 (我有25年前编写的代码,仍在使用中)。您不想破坏现有代码。

+0

+1由于历史原因,为什么大小应默认回答两个元素,即使对于标量 –

2

size(X,3)是在你的情况下,第三维的大小IS 1。例如尝试X = rand(2, 3, 5, 23, 4,2, 6),现在size(X, 3)应该给5

所有2D矩阵之后是真的一样一个三维矩阵,其中该第三维度的大小是1

+0

我想知道的是为什么第三(和第四,和第五......)尺寸应作为尾随单身尺寸存在。为什么不简单地停在这两个维度上,并尝试在第三维上使用大小返回错误消息? – user1205197

+0

@ user1205901,因为如果'size'策略抛出错误**现有代码的** LOT **将停止工作,并且所有地狱都会崩溃! – Shai

+2

*一个二维矩阵真的是相同的一个三维矩阵,其中第三维的大小是1 *仅在疯狂的世界中是正确的,例如,标量与1x1矩阵相同......哦,挂起上,这就是Matlab :-) –

4

这里是一个三维阵列的可视化。叫它x。阵列中的每个“切片”都是一个二维矩阵。

enter image description here

你可以看到,size(x,1) = 6size(x,2) = 6,确实size(x,3) = 6size函数计算每边的立方体数量。

现在考虑如果我们让y成为数组的单个“切片”会发生什么。它仍然在第一个和第二个方向上有六个立方体,所以size(y,1) = 6size(y,2) = 6,但现在每个切片在第三个方向上只有一个立方体 - 所以size(y,3) = 1

虽然无法在图片中显示这些图案,但此图案会继续保持较高的尺寸(4,5,6,...)。

+0

+1为可视化 – Shai