Matlab:使用给定条件更改3D数组中的元素

时间:2015-02-26 11:45:24

标签: arrays matlab multidimensional-array matrix-indexing

我在Matlab中有一个3维数组(10x3x3),我想将任何大于999的值更改为Inf。但是,我只想将此应用于此数组的(:,:,2:3)。

我在网上找到的所有帮助似乎只适用于整个数组或2D数组的1列。我无法弄清楚如何将其应用于3D阵列。

我已经尝试了以下代码,但在运行它之后它变成了一个69x3x3阵列,我真的不明白为什么。我试图使用2D数组从某人那里复制代码,所以我觉得我并不真正理解代码在做什么。

A(A(:,:,2)>999,2)=Inf;
A(A(:,:,3)>999,3)=Inf;

1 个答案:

答案 0 :(得分:2)

使用logical indexing -

的一种方法
mask = A>999;  %// get the 3D mask
mask(:,:,1) = 0; %// set all elements in the first 3D slice to zeros, 
%// to neglect their effect when we mask the entire input array with it
A(mask) = Inf %// finally mask and set them to Infs

另一位linear indexing -

idx = find(A>999); %// Find linear indices that match the criteria
valid_idx = idx(idx>size(A,1)*size(A,2)) %// Select indices from 2nd 3D slice onwards
A(valid_idx)=Inf %// Set to Infs

或者另一个linear indexing,与前一个几乎相同,有效索引在一个步骤中计算,从而使我们成为一个单行 -

A(find(A(:,:,2:3)>999) + size(A,1)*size(A,2))=Inf