“[tmp c]=max(S(:,I),[],2); c(I)=1:K;”在 MatLab 中的含义

Meaning of "[tmp c]=max(S(:,I),[],2); c(I)=1:K; " in MatLab

我正在尝试将 AP 集群的参考实现翻译成 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 相同,因此最终值只是 [=20= 的排列] 这取决于 I 但不取决于第一个语句的结果。

我以为我知道每个语句的作用,但组合是个谜。请直截了当

说到 R 版本:if

s is NxN while I is of length K << N.

然后

  • s[,I] 的维度为 N(行)x K(列)
  • 根据?max.colmax.col“[f]找到[s]矩阵的每一行的最大位置”(强调)
  • 因此 c 的长度为 N(即等于 s[,I 的数量)

如果 I 的长度为 K,则将值分配给 c[I] 将仅填充 cN 个值中的 K =],让另一个 N-K 等于它们的原始值。

R 进行向量化赋值,所以 c[I] <- 1:K 等同于(但比)

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