在MATLAB中索引矩阵时,我是否只能指定第一个或最后一个 n 维度,并且“自动选择”所有其他维度?
例如,我正在编写一个接收图像的函数,并使用imshow
显示它,它可以显示三维彩色图像(例如 {{1} }或2-D单色阵列(例如 1024x768)
我的功能并不关心图像有多少颜色通道,1024×768×3
会处理这个问题。我想要做的就是传递参数来选择一个区域:
imshow
我应该用什么代替最后一个冒号来说“包含所有其他尺寸”?
答案 0 :(得分:7)
您可以将逗号分隔列表扩展与':'
索引一起使用。
假设您的输入是:
A = rand([7,4,2,3]);
仅检索前2:
cln = {':', ':'};
A(cln{:})
检索最后3:
cln = {1, ':', ':', ':'};
A(cln{:})
可以概括为:
sten = 2:3; % Which dims to retrieve
cln(1:ndims(A)) = {1};
cln(sten) = {':'};
A(cln{:})
答案 1 :(得分:1)
根据Oleg的回答,这里有一个功能,如果您从几个第一维中选择,它将起作用。如果需要其他维度,我认为您可以看到如何修改。
function [dat] = getblock2(dat, varargin)
%[dat] = getblock(dat, varargin) select subarray and retain all others
% unchanged
%dat2 = getblock(dat, [1,2], [3,5]) is equivalent to
% dat2 = dat(1:2, 3:5, :, :, :) etc.
%Peter Burns 4 June 2013
arg1(1:ndims(dat)) = {':,'};
v = cell2mat(varargin);
nv = length(v)/2;
v = reshape(v,2,nv)';
for ii=1:nv
arg1{ii} = [num2str(v(ii,1)),':',num2str(v(ii,2)),','];
end
arg2 = cell2mat(arg1);
arg2 = ['dat(',arg2(1:end-1),')'];
dat = eval(arg2);