R语言矩阵操作:如何筛选提取矩阵中的最小非零值
实现方法
你可以通过逻辑索引筛选非零元素后取最小值,以下是不同场景下的实现方案:
通用场景(任意包含0的矩阵)
直接用逻辑判断过滤所有0值后调用min():min(A[A != 0])上述代码中
A != 0会生成与矩阵维度一致的逻辑值矩阵,用该矩阵索引即可提取所有非零元素,最终得到目标值1.414214。浮点计算生成的矩阵场景(避免精度误差导致的伪0干扰)
若矩阵是浮点计算得到的,存在接近0的极小误差值,可以通过阈值过滤:min(A[abs(A) > 1e-9])对称距离矩阵专属场景(对角全为0)
你提供的矩阵是典型的对称距离矩阵,对角元素均为0,直接提取下三角/上三角(无对角元素)后取最小值即可:min(A[lower.tri(A)])
完整示例代码
# 构造和你示例一致的矩阵 A <- matrix( c( 0, 1.414214, 2.828427, 4.242641, 5.656854, 1.414214, 0, 1.414214, 2.828427, 4.242641, 2.828427, 1.414214, 0, 1.414214, 2.828427, 4.242641, 2.828427, 1.414214, 0, 1.414214, 5.656854, 4.242641, 2.828427, 1.414214, 0 ), nrow = 5, byrow = TRUE ) # 调用方法 min(A[A != 0]) # 输出:1.414214
内容的提问来源于stack exchange,提问作者youfacejaraxxus
相关产品推荐
相关产品推荐

