如何使用Matlab

时间:2015-05-17 03:41:19

标签: matlab multidimensional-array indexing size

以下是维度A

的矩阵6x3x8x5

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

ans = [6 3 8 5]

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

如果我想要指定一组尺寸,例如 3rd 4th 尺寸或 2nd nth < em>维度

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

但是从Doc看来,尺寸的输入尺寸只能是标量。当我尝试这样做时,我收到此错误:

>> size(A,[2 3])
  

使用尺寸时出错   Dimension参数必须是索引范围内的正整数标量。

我期待输出

ans = [3 8]

供参考:

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

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

我目前正在做的是

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

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

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

2 个答案:

答案 0 :(得分:4)

这就是写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);

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

答案 1 :(得分:3)

我和Troy Haskin's answers都借用了这个问题:How can I index a MATLAB array returned by a function without first assigning it to a local variable?我个人认为适合您案例的getfield方法,只需将getfield包裹在size左右A = randn(1,2,3,4,5); %// 5D double out = getfield(size(A),{[2 3]}) 1}}功能:

out =

     2     3
subsref

使用<p ng-repeat="(key,item) in option" style="margin-bottom:0px "> <label> <input type="radio" is-valid ng-model="value" selected-key="value" name="select" value="{{key}}" ng-checked="getChecked($index)"> {{item.name}} </label> </p> 可能是更直接,更快速的更好方法,但它可能会降低您的代码的可读性,因为它是非常具体的黑客攻击。