【问题标题】:Min / Max of 3d Matrix using different intervals Matlab使用不同间隔 Matlab 的 3d 矩阵的最小值/最大值
【发布时间】:2017-12-08 13:09:28
【问题描述】:

我有一个大小为 MxNxZ 的 3d 矩阵 A。我正在像这样在 Z 方向上搜索每个向量的最小值。

I = min(A(:, :, minInterval : maxInterval), [], 3);

这是有效的。

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

minIntervals of size MxN
maxIntervals of size MxN

然后我正在尝试这个:

I = min(A(:, :, minIntervals : maxIntervals), [], 3);

但它不起作用,只使用 minIntervals(1,1) 和 maxIntervals(1,1)。

你有什么想法吗,我不想使用循环,因为数据的大小。

非常感谢。

【问题讨论】:

  • 第三维怎么可能是矩阵 MxN?
  • @SivaSrinivasKolukula 第三维不是矩阵 MxN。使用 min(A, [], 3) 可以找到每个向量的最小值,因此每个 A(i,j,:) 的最小值。但我只想在 A(i,j,minInterval:maxInterval) 中找到最小值。这是有效的。但是当 min/maxInterval 在不使用循环的情况下发生变化时怎么办?不使用 A(i,j,minInterval(i,j):maxInterval(i,j))?

标签: matlab matrix 3d intervals min


【解决方案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);

【讨论】:

  • 感谢您的回答,它似乎有效。我只是对 min 函数有一点问题。我说我有太多的输入参数。我用的是Matlab r2009b,可能是因为这个?
  • @bRiocHe 答案已更新。您可以将数组的元素设置为 Inf ,而不是 NaN ,因此无需省略。
  • 很高兴能帮上忙!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-17
  • 1970-01-01
相关资源
最近更新 更多