2

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

但是,size(X, k) == 1,其中k任何整数 > 3。为什么会发生这种情况?

4

3 回答 3

7

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

标量也是如此。如果标量的大小是 1x1,那么它的大小一定是 1x1x1x1x...

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

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

于 2013-06-25T10:47:37.270 回答
4

这是一个三维数组的可视化。调用它x。数组中的每个“切片”都是一个二维矩阵。

在此处输入图像描述

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

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

这种模式在更高的维度(4、5、6、...)中继续存在,尽管不可能在图片中显示它们。

于 2013-06-25T08:55:13.877 回答
2

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

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

于 2013-06-25T08:44:24.517 回答