You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在不使用for循环或apply的情况下找出矩阵中目标元素最多的行

高效找出矩阵中符合条件的行(禁用for循环与apply)

需求说明

  • 给定矩阵,找出拥有最多小于右侧后续元素的元素的行
  • 限制:不得使用for循环或apply系列函数
  • 现有问题:对seq(1,1000)生成的1000×1000矩阵执行操作耗时22秒,需优化性能

示例矩阵

A =
6 4 2
3 3 3
1 2 3
7 8 8
2 4 5

示例结果:符合条件的是第3行和第5行

解决方案(向量化实现)

利用R的向量化底层优化实现高效计算,完全避免循环:

# 构造示例矩阵
A <- matrix(c(6,4,2,3,3,3,1,2,3,7,8,8,2,4,5), nrow=5, byrow=TRUE)

# 计算每行中元素小于右侧元素的数量
counts <- rowSums(A[, -ncol(A)] < A[, -1], na.rm = TRUE)

# 筛选出数量最多的行号
max_count <- max(counts)
target_rows <- which(counts == max_count)

# 输出结果
target_rows

原理说明

  1. A[, -ncol(A)]取原矩阵除最后一列的所有列,A[, -1]取原矩阵除第一列的所有列,两者维度完全匹配
  2. 逐元素比较得到逻辑矩阵,rowSums统计每行TRUE的数量(即符合条件的元素数)
  3. 最后找出最大值对应的行号即可

这种向量化操作由R底层C代码实现,性能远高于循环/apply,能极大降低大矩阵的计算耗时

内容的提问来源于stack exchange,提问作者Texas2022

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 15:55:27