基于Matlab的不同区间三维矩阵的Min/Max

基于Matlab的不同区间三维矩阵的Min/Max,matlab,matrix,3d,intervals,min,Matlab,Matrix,3d,Intervals,Min,我有一个尺寸为MxNxZ的3d矩阵。我在Z方向上搜索每个向量的最小值,如下所示 I = min(A(:, :, minInterval : maxInterval), [], 3); 这是有效的 现在我想为每个向量设置可变的间隔。我有两个二维矩阵,如下所示: minIntervals of size MxN maxIntervals of size MxN 然后我试着这样做: I = min(A(:, :, minIntervals : maxIntervals), [], 3); 但它不

我有一个尺寸为MxNxZ的3d矩阵。我在Z方向上搜索每个向量的最小值,如下所示

I = min(A(:, :, minInterval : maxInterval), [], 3);
这是有效的

现在我想为每个向量设置可变的间隔。我有两个二维矩阵,如下所示:

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);

第三维怎么可能是矩阵MxN?@SivaSrinivasKolukula第三维不是矩阵MxN。使用min(A,[],3)可以找到每个向量的最小值,因此每个A(i,j,:)的最小值。但是我只想在A(I,j,minInterval:maxInterval)中找到最小值。这是有效的。但是,在不使用循环的情况下,当min/maxInterval发生变化时,该怎么办?不使用(i,j,minInterval(i,j):maxInterval(i,j))?感谢您的回答,它似乎起作用了。我只是对min函数有点小问题。我说我有太多的输入参数。“我使用的是MatlabR2009B,也许是因为它?”bRiocHe回答更新。您可以将数组的元素设置为Inf,而不是
NaN
,因此无需省略NaN。如果它能提供帮助,我们将非常高兴!
z=reshape(1:size(A,3),1,1,[]);
A(bsxfun(@lt, z, minInterval) | bsxfun(@gt, z,maxInterval))=Inf;
I=min(A,[],3);