r - 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 而不是关于第一个语句的结果。
我以为我知道每个语句的作用,但组合是一个谜。请纠正我。
解决方案
谈到 R 版本:如果
s 是 NxN,而 I 的长度是 K << N。
然后
s[,I]
尺寸为 N(行)x K(列)- 根据
?max.col
,max.col
“[f]ind[s]矩阵每一行的最大位置”(强调添加) - 因此
c
是长度N
(即,等于 的行数s[,I
)
如果I
是 长度K
,那么分配值c[I]
将仅填充K
的N
值c
,而使另一个N-K
等于它们的原始值。
R 进行矢量化赋值,因此c[I] <- 1:K
等价于(但速度更快)
for (j in seq(K)) {
c[I[j]] <- j
}
推荐阅读
- jquery - 不工作 $(this).removeAttr('123').attr('456','');
- ruby-on-rails - 赫斯基显示 Bundler::RubyVersionMismatch 错误
- opencv - 使用opencv从python中的圆棒图像中提取文本
- asp.net - ASP.NET 中的弹性搜索 - 使用 & 符号
- angular - TypeError:无法读取未定义的属性“订阅”(角度单元测试)
- prestashop-1.7 - 分享库存多店prestashop 1.7
- c - 打印指针值 NULL
- scala - Scala中的嵌套Monads组合
- javascript - 从 json 响应动态创建模式
- vue.js - 使用 v2 api 和 vue 自定义 wordpress 分类法