在r

时间:2018-04-06 09:33:56

标签: r matrix

我有一个大小为N的方阵A.我会从A得到一个大小为N-d的方阵B(其中d是一个大于或等于1的整数),这样就

B[i,j]=A[i+d,j+d] 

对于每个i,j = 1,...,N-d。

这应该意味着,对于d = 1,我们删除了矩阵A的第一行和列,对于d = 2,我们删除了A的前两行和依此类推......

我的解决方案是一个简单的双循环,但我想知道是否有更有效的方法来执行此任务。

3 个答案:

答案 0 :(得分:1)

这有效:

sub_matrix

如果您想将其变为最大化效率的功能:

matCutter

旁注:我发现人们在R中使用不同的appraoches来解决同样的问题很有意思 - 这是一个非常好的例子,表达“有不止一种方法可以给猫皮肤” - 我比较了我和Rui提供的matCuttercomponentDidMount() { var elementWhereIwantToScrollTo = ReactDOM.findDOMNode(this) scrollToComponent(elementWhereIwantToScrollTo, { offset: 0, align: 'middle', duration: 500, ease: 'inCirc' }) } 函数;使用<CardBox ref={(section) => { this.elementWhereIwantToScrollTo = section }} > ,运行时间大约快9倍。

答案 1 :(得分:1)

您可以编写一个函数来执行此操作。

sub_matrix <- function(m, d, drop = FALSE){
    m_name <- deparse(substitute(m))
    n <- nrow(m)
    if(n != ncol(m)) stop("not a square matrix")
    if(missing(d) || is.null(d)) stop(paste(sQuote(d), "is missing or is NULL"))
    if(d > n) stop(paste(sQuote(d), "is greater than the dim of", sQuote(m_name)))
    inx <- seq_len(n)[-seq_len(d)]
    m[inx, inx, drop = drop]
}

a <- matrix(1:25, 5)

sub_matrix(a, 2)
sub_matrix(a, 4)
sub_matrix(a, 4, drop = TRUE)
sub_matrix(a, 5)

sub_matrix(a, 6)

答案 2 :(得分:-2)

要检索右下角三角矩阵,您可以执行以下操作:

A <- matrix(1:100, 10, 10)
d <- 5
A[seq_len(nrow(A))[-seq_len(d)], seq_len(ncol(A))[-seq_len(d)], drop=FALSE]