首页 > 解决方案 > MatLab中“[tmp c]=max(S(:,I),[],2); c(I)=1:K; ”的含义

问题描述

我正在尝试将 AP Clustering 的参考实现翻译成 C++。这一系列语句让我感到困惑,因为它看起来好像向量 c 被一些数字填充,然后很快被一组不同的数字覆盖。这没有任何意义。这是 Matlab 代码:

[tmp c]=max(S(:,I),[],2); c(I)=1:K;

R 实现有一些非常相似的东西:

    c <- max.col(s[, I], ties.method="first")
    c[I] <- 1:K

确实 s 是 NxN 而 I 的长度是 K << N。但是当我读到它时,c 的大小与 I 相同,因此最终值只是 1:K 的排列,它取决于 I 而不是关于第一个语句的结果。

我以为我知道每个语句的作用,但组合是一个谜。请纠正我。

标签: rmatlabcluster-analysis

解决方案


谈到 R 版本:如果

s 是 NxN,而 I 的长度是 K << N。

然后

  • s[,I]尺寸为 N(行)x K(列)
  • 根据?max.colmax.col“[f]ind[s]矩阵每一行的最大位置”(强调添加)
  • 因此c是长度N(即,等于 的s[,I

如果I是 长度K,那么分配值c[I]将仅填充KNc,而使另一个N-K等于它们的原始值。

R 进行矢量化赋值,因此c[I] <- 1:K等价于(但速度更快)

for (j in seq(K)) {
    c[I[j]] <- j
}

推荐阅读