Matlab 基于特定用户选择维数的子阵列
比如说,我有一个三维数组Matlab 基于特定用户选择维数的子阵列,matlab,Matlab,比如说,我有一个三维数组nxmxp,我想要一个基于特定用户选择维度编号的子数组 例如:A是一个3D数组nxmxp function sub_A=子集(A,dim) 如果子集(A,1)->子集给出sub_A 1 x m x p 如果子集(A,2)->子集给出sub_A m x 1 x p 如果子集(A,3)->subset给subu A m x n x 1您可以构造索引的单元格数组,并与{:}索引一起使用以索引到矩阵中。请注意,您还需要提供沿指定维度使用的索引,否则不清楚沿该维度使用哪个“切片”
nxmxp
,我想要一个基于特定用户选择维度编号的子数组
例如:A是一个3D数组nxmxp
function sub_A=子集(A,dim)
如果子集(A,1)->子集给出sub_A 1 x m x p
如果子集(A,2)->子集给出sub_A m x 1 x p
如果子集(A,3)->subset给subu A m x n x 1
您可以构造索引的单元格数组,并与{:}
索引一起使用以索引到矩阵中。请注意,您还需要提供沿指定维度使用的索引,否则不清楚沿该维度使用哪个“切片”
function result = subset(A, dim, index)
% Create the subscript to use for each dimension. We use ':' for all except
% for the specified subset dimension we use the provided index
inds = repmat({':'}, 1, ndims(A));
inds{dim} = index;
% Now perform the indexing using subsref and substruct
result = A(inds{:});
end
您可以像下面这样使用它:
A = rand(4,5,3);
B = subset(A, 1, 1);
size(B)
% 1 5 3
C = subset(A, 2, 1);
size(C)
% 4 1 3
D = subset(A, 3, 1);
size(D)
% 4 5
或者,您甚至可以沿指定的维度指定多个索引
E = subset(A, 1, [1 3]);
size(E)
% 2 5 3
如何知道在指定维度上使用哪个索引?例如,对于
子集(A,1)
是A(1,:,:)
还是A(2,:,:)
等等。为什么不A(inds{:})
而不是subsref(A,substructure('()',inds))代码>?@LuisMendo说得好!我总是忘记你可以在子结构