【问题标题】:In R producing matrix of vectors and search for the optimum在 R 中产生向量矩阵并寻找最优值
【发布时间】:2013-09-02 09:33:05
【问题描述】:

一个基本的问题:我为此道歉。 在 R 中,我想生成一个具有 2 个索引的数据结构 x,让我们说 ij,s.t. (伪代码)

for (i in 1:10){
  for (j in 1:20){
    x[i,j] <- c(i+j,j-i^2)
  }
}

x 的每个元素都是一个具有 2 个分量的向量。此外,我想搜索x 找出哪一对i,j 给出了j-i^2 的最大值;这应该在上面的双for中完成。你能给我一些提示吗?谢谢大家。

【问题讨论】:

    标签: r data-structures for-loop mathematical-optimization


    【解决方案1】:

    您可以使用outer 完成此操作。从您的问题中不清楚您是将ij 视为绝对值还是某种索引向量。我假设它们是向量的索引,x:

    set.seed(1) 
    x <- runif(20) 
    matm <- outer( x[1:20] , (x[1:10])^2 , `-` )
    matp <- outer( x[1:10] , x[1:20] , `+` )
    
    head( cbind( i_plus_j = c(matm) , j_minus_i_sq = c(matp) ) )
    #      i_plus_j j_minus_i_sq
    #[1,] 0.1950138    0.5310173
    #[2,] 0.3016290    0.6376326
    #[3,] 0.5023585    0.8383620
    #[4,] 0.8377129    1.1737165
    #[5,] 0.1311871    0.4671906
    #[6,] 0.8278948    1.1638983
    
    
    which( matm == max( matm ) , arr.ind = TRUE  )
    #     row col
    #[1,]  18  10
    

    【讨论】:

    • 感谢您的提问;但是,ij 是标识x 元素的索引,我需要它们。例如,我会避免将x 视为一个列表,因为我不想考虑单个索引。是否可以定义具有双索引的列表,例如x[[i,j]]
    • 所以把它改成outer( x[1:20] , (x[1:10])^2 , "-" )outer( x[1:10] , x[1:20] , "+")
    • @Avitus 不客气,我更新了这个问题以反映这一点。干杯,
    猜你喜欢
    • 2017-03-27
    • 2020-11-29
    • 2021-10-27
    • 2013-12-09
    • 2019-02-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多