我有一个大小为 MxNxZ 的 3d 矩阵 A。我正在像这样搜索 Z 方向上每个向量的最小值。
I = min(A(:, :, minInterval : maxInterval), [], 3);
这是有效的。
现在我想为每个向量提供可变的间隔。然后我有两个 2d 矩阵如下:
minIntervals of size MxN
maxIntervals of size MxN
然后我正在尝试这个:
I = min(A(:, :, minIntervals : maxIntervals), [], 3);
但它不起作用,只使用最小间隔(1,1(和最大间隔(1,1(。
你有没有想法,由于数据的大小,我不想使用循环。
谢谢。
您可以将区间之外的矩阵值设置为Inf
并取最小值 :
在 MATLAB r2016b 及更高版本中:
z=reshape(1:size(A,3),1,1,[]);
A(z<minInterval | z>maxInterval)=Inf;
I=min(A,[],3);
在 r2016b 之前:
z=reshape(1:size(A,3),1,1,[]);
A(bsxfun(@lt, z, minInterval) | bsxfun(@gt, z,maxInterval))=Inf;
I=min(A,[],3);