以下是维度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)
直接使用它。为什么不在这种情况下?任何替代方案,使这个单线?
答案 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>
可能是更直接,更快速的更好方法,但它可能会降低您的代码的可读性,因为它是非常具体的黑客攻击。