【问题标题】:(Matlab) Dimensional indexing using indices returned by min function(Matlab) 使用 min 函数返回的索引进行维度索引
【发布时间】: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(第一列)。

我知道改变这些表达式的顺序会给我正确的答案,但是如果我想通过只计算一次这些表达式来获得所有维度索引呢?

【问题讨论】:

  • 第一个分钟(取决于输入矩阵的大小)返回索引向量,而不是数字。这不是整行或整列。这个向量是每一行中的最小数字,收集到一个向量中。

标签: matlab matrix multidimensional-array indexing minimum


【解决方案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!请注意,我们只使用一次minchk1_indchk2_ind 是我猜的你。
猜你喜欢
  • 2012-05-18
  • 2016-07-09
  • 1970-01-01
  • 1970-01-01
  • 2017-11-06
  • 1970-01-01
  • 2021-05-01
  • 2014-06-27
  • 2013-06-30
相关资源
最近更新 更多