Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
按顺序提取r矩阵行中的每两个元素,计算欧氏距离_R_Genetic Algorithm_Euclidean Distance - Fatal编程技术网

按顺序提取r矩阵行中的每两个元素,计算欧氏距离

按顺序提取r矩阵行中的每两个元素,计算欧氏距离,r,genetic-algorithm,euclidean-distance,R,Genetic Algorithm,Euclidean Distance,如何在矩阵中按顺序提取每两个元素,并将结果作为矩阵返回,以便将答案输入公式进行计算: 例如,我有一个包含6列的单行矩阵: [,1][,2][,3][,4][,5][,6] [1,] 2 1 5 5 10 1 我想在第一次迭代中提取列1和列2,在第二次迭代中提取列3和列4,依此类推。结果必须是矩阵形式 [1,] 2 1 [2,] 5 5 [3,] 10 1 我的原始代码: data <- matrix(c(1,1,1,2,2,1,2,2

如何在矩阵中按顺序提取每两个元素,并将结果作为矩阵返回,以便将答案输入公式进行计算:

例如,我有一个包含6列的单行矩阵:

    [,1][,2][,3][,4][,5][,6]
[1,]   2   1   5   5  10   1
我想在第一次迭代中提取列1和列2,在第二次迭代中提取列3和列4,依此类推。结果必须是矩阵形式

[1,] 2  1    
[2,] 5  5
[3,] 10 1
我的原始代码:

     data <- matrix(c(1,1,1,2,2,1,2,2,5,5,5,6,10,1,10,2,11,1,11,2), ncol = 2)

我关心的是,如果数据矩阵的维数为2,而中心矩阵的维数为6,如何计算数据中心的距离。(计算距离数据矩阵和中心矩阵中每两列的距离)。中心矩阵的每一行有三个中心。

可能是这样的吗

m <- matrix(c(2,1,5,5,10,1), ncol = 6)

list.seq.pairs <- lapply(seq(1, ncol(m), 2), function(x) {
  m[,c(x, x+1)]
})

> list.seq.pairs
[[1]]
[1] 2 1

[[2]]
[1] 5 5

[[3]]
[1] 10  1

m“我需要帮助”不是一个问题,因为我无法判断您的问题是一个神秘的例外,还是不懂该语言的一个单词(或介于两者之间的东西)。请您的问题明确说明您需要什么帮助。对于矩阵,
matrix(mat,ncol=2,byrow=TRUE)
。对于一个列表,
split(mat,rep(seq(length(mat)/2),each=2))
我能以矩阵的形式得到答案吗?@DataMiningStudent-当然,Trebek-但你能更具体一点吗?您是在为原始矩阵中的每一行寻找一个单独的矩阵,还是仅为一个矩阵(如果是后者,您是否尝试了上面alistaire的评论答案)?嗨,我希望为原始矩阵中的每一行寻找一个单独的矩阵。例如,在一次迭代之后,我得到了一个矩阵,这样我可以在计算中使用它。然后,下一次迭代将生成另一个矩阵,并为计算提供答案。我希望我能把自己说清楚。如果我的解释令人困惑,很抱歉。我已经编辑了我的问题,以插入您的代码草案reference@DataMiningStudent-我做了一些改变,但我仍然不确定你想做什么-希望能有所帮助。
        [1,][,2][,3]

    [1,]
    [2,]
    [3,]
    [4,]
    [5,]
    [7,]
    [8,]
    [9,]
    [10]
m <- matrix(c(2,1,5,5,10,1), ncol = 6)

list.seq.pairs <- lapply(seq(1, ncol(m), 2), function(x) {
  m[,c(x, x+1)]
})

> list.seq.pairs
[[1]]
[1] 2 1

[[2]]
[1] 5 5

[[3]]
[1] 10  1
mm <- matrix(1:18, ncol = 6, byrow = TRUE)       

apply(mm, 1, function(x) {
  lapply(seq(1, length(x), 2), function(y) {
    x[c(y, y+1)]
  })
})
mm <- matrix(1:18, ncol = 6, byrow = TRUE)       

list.mats <- lapply(1:nrow(mm), function(x){
  a = matrix(mm[x,], ncol = 2, byrow = TRUE)
})

> list.mats
[[1]]
     [,1] [,2]
[1,]    1    2
[2,]    3    4
[3,]    5    6

[[2]]
     [,1] [,2]
[1,]    7    8
[2,]    9   10
[3,]   11   12

[[3]]
     [,1] [,2]
[1,]   13   14
[2,]   15   16
[3,]   17   18
results <- t(apply(mm, 1, function(x) {
  sapply(seq(1, length(x), 2), function(y) {
    val1 = x[y] # Get item one
    val2 = x[y+1] # Get item two
    val1 / val2 # Do your calculation here
  })
}))

> results
          [,1]   [,2]      [,3]
[1,] 0.5000000 0.7500 0.8333333
[2,] 0.8750000 0.9000 0.9166667
[3,] 0.9285714 0.9375 0.9444444