【问题标题】:How to efficiently loop through a triangular matrix如何有效地循环遍历三角矩阵
【发布时间】:2012-07-16 16:59:17
【问题描述】:

我有一个三角矩阵,想有效地循环遍历所有元素。有没有一种我根本看不到的聪明方法?

这是我的矩阵的一个小例子

        [,1] [,2] [,3] [,4]
  [1,]    1    0    0    0
  [2,]    2    1    0    0
  [3,]    3    7    1    0
  [4,]    4    4    10   1

我想要做的是对该矩阵中位于主对角线下方(上方)的元素执行一些函数f()。 (背景:我知道我有一个对称矩阵,想要执行一些耗时的数据操作,我想“镜像”我的矩阵)

【问题讨论】:

  • 如果您提供更完整的示例,帮助会容易得多。具体来说,你想应用什么函数,函数返回什么,你会把这些值放在哪里?

标签: r for-loop


【解决方案1】:

如下所示,lower.tri()upper.tri() 提供了一种在矩阵相关扇区中提取和替换元素的表达性(和快速)方法。由于与索引操作相比,您应用于元素的函数可能很慢,因此搜索更快的索引选项(或试图避免对t() 的单一调用)可能没有意义。

## Example data
m <- matrix(c(1,2,3,4,0,1,7,4,0,0,1,10,0,0,0,1), ncol=4)

## Example of a slow function
slowFun <- function(x) sapply(x, function(x) {Sys.sleep(0.1); x^2})

## Proposed strategy
m[lower.tri(m)] <- slowFun(m[lower.tri(m)])
m[upper.tri(m)] <- t(m)[upper.tri(m)]      

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多