如何在 Matlab 中使用 size() 函数检索特定尺寸

How to retrieve specific dimensions using size() function in Matlab

这是维度 6x3x8x5

的示例矩阵 A

现在如果我使用 size(A),我会得到所有维度作为行向量

ans = [6 3 8 5]

如果我想获得特定维度(单数),我可以使用 size(A,1)size(A,3) 等。

如果我想要指定的尺寸集,例如 3rd4th 尺寸或 2ndnth 维度

我想做的是 size(A,3:4)size(A,2:n)size(A,[1 3 4])

但从 Doc 看来,size 的输入维度只能是标量。当我尝试这样做时,出现了这个错误:

>> size(A,[2 3])

Error using size
Dimension argument must be a positive integer scalar within indexing range.

我希望输出是

ans = [3 8]

仅供参考:

我正在尝试将其作为输入参数传递给另一个函数,如下所示:

out = someFunction(arg1,arg2,size(A,[2 3]))

我现在正在做的是

[~,size2,size3,~] = size(A)

out = someFunction(arg1,arg2,[size2, size3])

我只是想不用第一行就直接用。显然当我们只有两个维度时,我们直接使用它只是通过size(A)。为什么不在这种情况下?有什么替代方案可以使它成为单线的吗?

size就是这么写的。

如果你想要单行,你可以使用subsref索引size的单输出形式:

out = someFunction(arg1,arg2,...
              subsref(size(A),struct('type','()','subs',{{[2,3]}})));

如果您要经常这样做,请在 Matlab 路径的某处添加一个函数或添加一行:

sizes = @(A,dims) subsref(size(A),struct('type','()','subs',{{dims}}));
out   = someFunction(arg1,arg2,sizes(A,[2,3]));

您还可以创建 sizes 而无需 直接 调用 subsref 通过函数句柄的一些间接调用:

getSizes = @(d,s) d(s);
sizes    = @(A,s) getSizes(size(A),s);

这可能更清晰,更易于维护。

两种 Troy Haskin's answers and mine are borrowed from this question: How can I index a MATLAB array returned by a function without first assigning it to a local variable? I personally find the getfield 方法都适合您的情况,您只需将 getfield 包裹在 size 函数周围:

A = randn(1,2,3,4,5);   %// 5D double

out = getfield(size(A),{[2 3]})

out =

     2     3

使用 subsref 可能是更好的方法,因为它更直接、更快速,但它可能会降低您的代码的可读性,因为它是非常具体的 hack。