使用冒号在未知维度的矩阵中进行索引

seb*_*ebf 5 matlab multidimensional-array matrix-indexing

当MATLAB索引矩阵,我只能指定第一个或最后ñ尺寸,并具有"自动选择"所有其他尺寸是多少?

例如,我正在编写一个接收图像并显示图像的功能imshow,可以显示三维彩色图像(例如 1024×768×3)或二维单色阵列(例如 1024x768).
我的功能并不关心图像有多少颜色通道,imshow会照顾它.我想要做的就是传递参数来选择一个区域:

imshow(frame(x1:x2, y1:y2, :))
Run Code Online (Sandbox Code Playgroud)

我怎么代替最后一个冒号说" 包括所有其他尺寸 "?

Ole*_*leg 7

您可以将逗号分隔列表扩展':'索引一起使用.

假设你的输入是:

A = rand([7,4,2,3]);
Run Code Online (Sandbox Code Playgroud)

要仅检索前2:

cln = {':', ':'};
A(cln{:})
Run Code Online (Sandbox Code Playgroud)

要检索最后3个:

cln = {1, ':', ':', ':'};
A(cln{:})
Run Code Online (Sandbox Code Playgroud)

哪个可以推广:

sten            = 2:3;    % Which dims to retrieve
cln(1:ndims(A)) = {1};
cln(sten)       = {':'};
A(cln{:})
Run Code Online (Sandbox Code Playgroud)

  • 非常有用的技巧.值得指出的是,您可以拥有任意数量的冒号,因为对于"不存在"的任何尾随维度,假定长度为1. (2认同)