(Matlab) 使用 min 函数返回的索引进行维度索引
Posted
技术标签:
【中文标题】(Matlab) 使用 min 函数返回的索引进行维度索引【英文标题】:(Matlab) Dimensional indexing using indices returned by min function 【发布时间】:2014-06-12 20:26:02 【问题描述】:假设我有一个 5 维矩阵 C,我使用下面的代码得到一个最小矩阵 C3(C3 的每个元素代表维度 1,2,3 的最小值):
[C1, I1] = min(C,[],1);
[C2, I2] = min(C1, [], 2);
[C3, I3] = min(C2, [], 3);
问题是如何得到每个维度的最小值的索引?例如考虑这个更简单的情况:
C = [1,2;3,4]
这里的最小值是 1,它在维度 1 中的索引是 1(第一行),在维度 2 中也是 1(第一列)。
我知道改变这些表达式的顺序会给我正确的答案,但是如果我想通过只计算一次这些表达式来获得所有维度索引呢?
【问题讨论】:
第一个分钟(取决于输入矩阵的大小)返回索引向量,而不是数字。这不是整行或整列。这个向量是每一行中的最小数字,收集到一个向量中。 【参考方案1】:将其用于 5D 矩阵 -
[~,ind] = min(C(:))
[ind_dim1,ind_dim2,ind_dim3,ind_dim4,ind_dim5] = ind2sub(size(C),ind)
编辑 1:这适用于您不完全在寻找全局但特定于维度的最小值和索引的情况。
代码
%%// Random data for demo
C = randi(60,2,3,4,2,3);
%%// Your method
[C1, I1] = min(C,[],1)
[C2, I2] = min(C1, [], 2)
[C3, I3] = min(C2, [], 3)
%%// My method
dimID = 3; %%// Dimension till when minimum is to be found out
C_size = size(C);
dim_v1 = prod(C_size(1:dimID))
dim_v2 = prod(C_size(1:dimID-1))
t1 = reshape(C,[dim_v1 C_size(dimID+1:end)])
[val,ind1] = min(t1,[],1)
chk1_ind = ceil(ind1/dim_v2)
%%// This might suffice for you, but you insist to get the indices in the format
%%// identical to the one obtained from your method, try the next steps
C_size(1:dimID)=1;
chk2_ind = reshape(chk1_ind,C_size)
%%// Verify
error_check = isequal(chk2_ind,I3)
【讨论】:
所以我不是在计算全局最小值,而是我只想要某些维度的最小值。有什么方便的方法吗? @user3577923 只是为了让我们清楚,也许可以取一些样本输入值并向我们展示所需的输出?一些示例 3D 或 4D 输入? @user3577923 查看编辑 1!请注意,我们只使用一次min
。 chk1_ind
或 chk2_ind
是我猜的你。以上是关于(Matlab) 使用 min 函数返回的索引进行维度索引的主要内容,如果未能解决你的问题,请参考以下文章