matlab 使用逻辑阵列选择3D矩阵的特定页面

oaxa6hgo  于 2023-06-23  发布在  Matlab
关注(0)|答案(2)|浏览(186)

我有一个3D矩阵n x m x p,其中p代表1400个每日2D数据阵列。我还有一个长度为p x 1的逻辑数组。
如何创建一个新的3D矩阵,其中只包含p=1的“页面”?

daupos2t

daupos2t1#

这应该以与1D或2D数组的逻辑索引相同的方式工作。

n = 3; m = 4; p = 5;
tmp = rand([n,m,p]);
p_mask = logical([1 0 1 0 0]);
new = tmp(:,:,p_mask);

一个小的警告是,“逻辑”数组必须是logical类型。如果你使用一个包含1和0的双精度数组,Matlab会假设你想做常规(位置)索引,并抱怨因为你试图访问索引0处的元素,这是越界的:

Index in position 3 is invalid. Array indices must be positive integers or logical values.

编辑:上面对logical类型的强制转换只是为了说明“逻辑”索引只适用于逻辑类型,而不适用于浮点或整数类型。通常,逻辑索引将由一些条件来定义,例如p_mask = p_vals == 1;,其中p_vals将是包含1和0的数组。当然也没有必要为逻辑掩码创建一个新变量-new = tmp(:,:,p_vals == 1)也可以。

xpszyzbs

xpszyzbs2#

在MATLAB中,从这个n*m*p矩阵中提取页面或切片就像选择要取的页面一样简单。

np=1400
n=3;m=3;                   % page size, just as example

A=randi([-20 20],n,m,np);  % the n x m x p input matrix

p=randi([0 1],1,np);       % selector

p_selection=find(p==1);

B=A(:,:,p_selection);      % selected pages

相关问题