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说得好!我总是忘记你可以在
子结构