说,我有一个尺寸为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
答案 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