我正在尝试为编程问题创建索引向量。我们的想法是能够索引矩阵的元素,这样我就可以用另一个矩阵替换这些元素。
nstks<- 2
stk<-1:nstks
nareas<-3
area<-1:nareas
eff<-c(10,10,10)
x<-matrix(1:6,nrow=nstks,ncol=nareas)
h<-matrix(0,nrow=length(eff)+nstks,ncol=nareas)
for(i in 1:nareas) h[i,i]<-1
这将返回一个5乘3的矩阵,在前3行的对角线上有1s。现在我想用另一个函数返回的2乘3矩阵替换第4行和第5行。我想到的一种方法是通过以下方式索引h矩阵:
hlen<-c(nareas + stk,(nareas+ stk +(nareas +nstks)),(nareas+stk +(nareas+nstks)+(nareas+nstks)))
h[hlen] <- x
将h的4,5,9,10,14,15个元素替换为x的元素。
但是,我需要为不同数量的nstks和nareas提供灵活性。例如,对于nareas = 4和nstks = 3,我需要吐出一个向量:c(5,6,7,12,13,14,19,20,21,26,27,28)
澄清一下:我需要为约束优化问题创建jacobian矩阵。雅可比的尺寸取决于约束的数量和变量的数量。我想写一个函数,它将为任何指定数量的维度提供雅可比矩阵。
变量是eff,其长度与nareas相同。在eff上存在非负性约束,其在第一nareas * nareas子矩阵中反映为对角单位矩阵。矩阵的最后几行反映了对库存可捕获的鱼数的限制。因此,对于一只股票,只会增加1股,2股,2股等等。
我需要用另一个矩阵给出的元素替换这些最后一行中的元素。在示例中,x仅用于说明。实际的x由函数给出,但具有相同的尺寸。这会澄清事情吗?
有什么想法吗?
谢谢! 我相信我可以使用:
h[(length(eff)+1): (length(eff)+nstks),1:nareas]<-x
我像往常一样太复杂了。谢谢你的帮助。
答案 0 :(得分:0)
不是试图找到需要用另一个函数返回的子矩阵替换的值的索引,而不是直接放在子矩阵中吗?
E.g。如果你有:
x <- matrix(c(0, 1, 1, 0, 0, 1), ncol=3)
x
[,1] [,2] [,3]
[1,] 0 1 0
[2,] 1 0 1
确定要删除子矩阵的部分:
h[4:5, 1:3] <- x
h
[,1] [,2] [,3]
[1,] 1 0 0
[2,] 0 1 0
[3,] 0 0 1
[4,] 0 1 0
[5,] 1 0 1
或者,如果x是向量,
x <- c(0, 1, 1, 0, 0, 1)
x <- matrix(x, ncol=3, byrow=TRUE)
h[4:5, 1:3] <- x