【问题标题】:Creating a sequence of numbers for indexing matrices创建用于索引矩阵的数字序列
【发布时间】:2014-03-31 18:45:14
【问题描述】:

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

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 x 3 矩阵,其中前 3 行的对角线上为 1。现在我想用另一个函数返回的 2 x 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)

澄清一下:我需要为约束优化问题创建雅可比矩阵。雅可比的维度取决于约束的数量和变量的数量。我想编写一个函数,该函数将为任何指定维数提供雅可比矩阵。

变量是eff,它的长度和nareas一样。对 eff 有非负约束,这反映在第一个 nareas*nareas 子矩阵是对角单位矩阵中。矩阵的最后一行反映了对可以捕获的鱼数量的限制,按库存。因此,对于一只股票,只会增加 1 行、2 只股票、2 行等。

我需要用另一个矩阵给出的元素替换最后几行中的元素。在示例中,x 仅用于说明。实际的 x 由函数给出,但具有相同的维度。这是否澄清了一些事情?

有什么想法吗?

谢谢! 我相信我可以使用:

h[(length(eff)+1): (length(eff)+nstks),1:nareas]<-x

像往常一样,我把它弄得太复杂了。感谢您的帮助。

【问题讨论】:

  • 你的问题太模糊了。请说明。

标签: r


【解决方案1】:

与其尝试查找需要用从另一个函数返回的子矩阵替换的值的索引,不如直接放在子矩阵中吗?

例如如果你有:

x <- matrix(c(0, 1, 1, 0, 0, 1), ncol=3)
x

     [,1] [,2] [,3]
[1,]    0    1    0
[2,]    1    0    1

确定要在 h 中放置子矩阵的部分:

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

【讨论】:

  • 哈。我相信这会奏效-谢谢。为了使其灵活,我可以使用:
  • 我误按了返回。我编辑了操作以显示使用您的逻辑可以做什么。
  • 酷,很好的通用解决方案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-11-23
  • 1970-01-01
  • 2013-11-18
  • 1970-01-01
  • 2023-01-21
  • 2013-03-22
  • 2017-03-19
相关资源
最近更新 更多