基于特定用户选择维度编号的子阵列

时间:2016-12-07 16:14:59

标签: matlab

说,我有一个尺寸为n x m x p的3D数组,我想要一个基于特定用户选择尺寸编号的子阵列。

例如: A 是3D数组n x m x p

function sub_A = subset(A,dim)
if subset(A,1) -> subset gives sub_A 1 x m x p if subset(A,2) -> subset gives sub_A m x 1 x p if subset(A,3) -> subset gives sub_A m x n x 1

1 个答案:

答案 0 :(得分:2)

您可以构建索引的单元格数组,并使用带有{:}索引的a comma-separated list来索引矩阵。请注意,您还需要提供要在指定维度上使用的索引,否则不清楚在该维度上使用哪个“切片”。

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