为索引矩阵创建一系列数字

时间:2014-03-31 18:45:15

标签: r

我正在尝试为编程问题创建索引向量。我们的想法是能够索引矩阵的元素,这样我就可以用另一个矩阵替换这些元素。

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

我像往常一样太复杂了。谢谢你的帮助。

1 个答案:

答案 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