r - 向量化跨矩阵行的操作
问题描述
我想对矩阵进行矢量化( apply
)操作,如下面的循环所示,其结果是矢量:which
X
for
ind
X = matrix( 1:20, 4, 5 )
V = sample( 1:20, 4 )
ind = numeric()
for( i in 1:nrow(X) ) ind[i] = max( c(0, which(X[i,] < V[i]) ))
该操作针对元素索引中的ind
每一行返回,X
其中最大值小于 的X
-row-corresponding 元素所指示的值V
。
该操作max
将所有合格索引的向量映射到一个标量。或者,我会对返回所有索引的例如 a 的操作感到满意list
(我可以lapply
max
)。
解决方案
如果您的矩阵具有增加的值,例如您共享的示例(我当然对此表示怀疑),但是如果确实如此,您可以简单地做,
rowSums(X < V)
#[1] 4 3 4 0
但是,如果不是这种情况,那么一个简单的apply
就足够了,即
apply(X < V, 1, function(i)max(which(i)))
#[1] 4 3 4 -Inf
请记住,所有数学运算都是矢量化的,因此<
也是矢量化的
-Inf
您可以照常更换
推荐阅读
- scala - 由于 java.lang.NoSuchMethodError,sbt 无法编译 Scala 项目
- nuxt.js - 如果路由不以 index 开头,则防止 nuxt 从 index 开始
- swift - 我可以查询并查看 Firestore 的两个不同字段中是否存在一个值吗?
- python - pandas_datareader 的非弃用版本是什么?
- regex - 正则表达式从文件中提取单词
- keras - 使用 Tensorflow 后端在 Keras 中实现双编码器 LSTM
- node.js - 如何使用连接在我的节点服务器上启用 gzip?
- python - 如何从文件中读取浮点数并在 Python 中显示平均值
- laravel - 动态搜索功能相册
- javascript - While循环隐藏div元素