如果我输入X = rand(2,3)
thensize(X,1)
并size(X,2)
产生预期的结果。如果我输入ndims (X)
,我会得到预期的两个维度。
但是,size(X, k) == 1
,其中k
任何整数 > 3。为什么会发生这种情况?
如果我输入X = rand(2,3)
thensize(X,1)
并size(X,2)
产生预期的结果。如果我输入ndims (X)
,我会得到预期的两个维度。
但是,size(X, k) == 1
,其中k
任何整数 > 3。为什么会发生这种情况?
这必须发生,如果大小的行为是一致的。我们认为向量的大小为 1xn 或 nx1。当然方向很重要,否则 MATLAB 可以简单地告诉您向量的长度为 n。在后一种情况下,有一个尾随单例维度,因此隐含了无限多个尾随单例维度。所以列向量的大小实际上是 nx1x1x1...,而行向量的大小是 1xnx1x1...
标量也是如此。如果标量的大小是 1x1,那么它的大小一定是 1x1x1x1x...
尺寸必须告诉你一个物体的尺寸,它应该停在哪里?我想如果您要从头开始重新设计 MATLAB,您可能会决定不报告任何尾随单例维度。所以列向量将被报告为维度 n,但行向量维度为 1xn?老实说,我实际上更喜欢被告知列向量的维度为 nx1。但它在逻辑上的维度必须是 nx1x1x1 ......
无论如何,很久以前 MATLAB 不允许您在数组中索引超过二维。高维数组已经存在至少 20 年左右,但仍有许多遗留代码仍然有用。(我有 25 多年前编写的代码,并且仍在使用中。)您不想破坏现有代码。
这是一个三维数组的可视化。调用它x
。数组中的每个“切片”都是一个二维矩阵。
你可以看到,size(x,1) = 6
而且size(x,2) = 6
确实如此size(x,3) = 6
。该size
函数计算每边的立方体数量。
现在考虑如果我们让y
成为数组的单个“切片”会发生什么。它仍然在第一和第二方向有六个立方体,所以size(y,1) = 6
和size(y,2) = 6
,但是现在每个切片在第三方向只有一个立方体 - 所以size(y,3) = 1
。
这种模式在更高的维度(4、5、6、...)中继续存在,尽管不可能在图片中显示它们。
size(X,3)
是第三维的大小,在您的情况下是 IS 1
。试试X = rand(2, 3, 5, 23, 4,2, 6)
例如,现在size(X, 3)
应该给5
.
毕竟 2D 矩阵实际上是相同的 3D 矩阵,其中第三维的大小为 1