我有一个大小为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的前两行和依此类推......
我的解决方案是一个简单的双循环,但我想知道是否有更有效的方法来执行此任务。
答案 0 :(得分:1)
这有效:
sub_matrix
如果您想将其变为最大化效率的功能:
matCutter
旁注:我发现人们在R中使用不同的appraoches来解决同样的问题很有意思 - 这是一个非常好的例子,表达“有不止一种方法可以给猫皮肤” - 我比较了我和Rui提供的matCutter
和componentDidMount() {
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]