【发布时间】:2016-04-03 22:50:28
【问题描述】:
我有一个m X n X k 矩阵,我想为每个唯一的二维空间坐标找到沿第三维具有最小绝对值的元素。一个额外的限制是,一旦我找到这些最小值,这些值的符号(即在我取绝对值之前)必须保持。
我为此编写的代码如下所示。
tmp = abs(dist); %the size(dist)=[m,n,k]
[v,ind] = min(tmp,[],3); %find the index of minimal absolute value in the 3rd dimension
ind = reshape(ind,m*n,1);
[col,row]=meshgrid(1:n,1:m); row = reshape(row,m*n,1); col = reshape(col,m*n,1);
ind2 = sub2ind(size(dist),row,col,ind); % row, col, ind are sub
dm = dist(ind2); %take the signed value from dist
dm = reshape(dm,m,n);
生成的矩阵dm 即m X n 对应于受我之前提到的约束的矩阵。但是,这段代码听起来有点低效,因为我必须生成线性索引。有什么办法可以改善吗?
【问题讨论】:
-
min(abs(dist),[],3)?还是我错过了什么? -
@Yuanhao 前两行代码已经在这样做了。找到最小值后,您是否也要尊重它们的原始符号?这就是您的代码为其余部分所做的工作。
-
嗨 rayryeng,是的,我也需要这个标志。其余代码正在这样做,但正如我指出的那样效率不高,因为我总是需要在 sub 和 index 之间切换,这很烦人。
-
这更有意义。让我制定一个答案。请稍等。
-
@LuisMendo 嗨 Luis,
min(abs(dist),[],3)仅给出最小绝对值。我需要具有最小绝对值的元素。所以,它可能是负面的。我的代码的前两行查找最小绝对值的索引,而其余代码则尝试查找符号。
标签: matlab matrix vectorization