size()返回1,其中矩阵维度不应存在

时间:2013-06-25 08:41:33

标签: matlab

如果我输入X = rand(2,3),则size(X,1)size(X,2)会产生预期结果。如果我输入ndims (X),我会得到预期的两个维度。

然而,size(X, k) == 1,其中k是任何整数> 3.为什么会这样?

3 个答案:

答案 0 :(得分:7)

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

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

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

无论如何,很久以前MATLAB不允许你在数组中超出两个维度。高维数组已经存在至少20年左右,但仍有许多遗留代码仍然有用。 (我有25年前编写的代码,并且仍在使用中。)您不想破坏现有代码。

答案 1 :(得分: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,......),但无法在图片中显示这些图案。

答案 2 :(得分:2)

size(X,3)是第三维的大小,在您的情况下是1。以X = rand(2, 3, 5, 23, 4,2, 6)为例,现在size(X, 3)应该5

毕竟2D矩阵实际上是相同的3D矩阵,其中第三维的尺寸是1