gpt4 book ai didi

r - 给定一个向量 c(a1, a2, a3),如何在 R 中生成 c(a1, a2, a3, a2, a3, a3)?

转载 作者:行者123 更新时间:2023-12-01 07:14:01 25 4
gpt4 key购买 nike

题目已经解释了这个问题。在我的问题中,向量很长,大约 1,500。
我尝试的一种方法是按如下方式生成矩阵,

enter image description here

粗略地说,这个矩阵rbind三个对角矩阵,diag(1, 3) , diag(1,2)diag(1,1) .但是这些矩阵的列数不同。因此 rbind不适用于此处。有没有什么有效的方法来解决这个问题。

最佳答案

vec <- 1:4
n <- length(vec)
as.vector(rev(setNames(vec, n:1)[as.character(sequence(1:n))]))
# [1] 1 2 3 4 2 3 4 3 4 4

这里有几个技巧; as.vector是不必要的,它只是省略了向量名称。
Tyler <- function() do.call(rbind, mapply(compile, rows, nums, lst))
Julius <- function() as.vector(rev(setNames(vec, n:1)[as.character(sequence(1:n))]))

# Vector of length 3
# Unit: microseconds
# expr min lq median uq max neval
# Tyler() 144.183 148.383 151.649 155.382 2241.617 1000
# Julius() 73.724 76.058 80.724 82.590 276.236 1000

# Vector of length 1500
# Unit: seconds
# expr min lq median uq max neval
# Julius() 1.2181 1.270544 1.469416 1.506019 1.518471 10
# (list of 1500 diagonal matrices took too much memory, couldn't compare)

编辑。
JuliusTwo <- function() rev(vec[n + 1 - sequence(1:n)])

vec <- 1:3
n <- length(vec)
microbenchmark(Julius(), JuliusTwo(), times = 1000)
# Unit: microseconds
# expr min lq median uq max neval
# Julius() 72.326 75.125 76.525 78.392 259.905 1000
# JuliusTwo() 49.461 51.794 53.194 54.595 1950.450 1000

vec <- 1:1500
n <- length(vec)
microbenchmark(Julius(), JuliusTwo(), Henrik(x2), times = 10)
# Unit: milliseconds
# expr min lq median uq max neval
# Julius() 1497.9588 1499.9438 1547.660 1582.0843 1590.2048 10
# JuliusTwo() 157.0313 157.9193 177.682 200.7433 214.9415 10
# Henrik(x2) 4639.1891 6157.247 7178.9953 7350.8146 7640.8685 10

Matthew <- function() {m <- matrix(rep(vec, n), n);m[lower.tri(m, diag=TRUE)]}
microbenchmark(JuliusTwo(), Matthew(), Arun(vec), times = 100)
# Unit: milliseconds
# expr min lq median uq max neval
# JuliusTwo() 113.25630 121.69106 126.16566 150.42730 237.51304 100
# Matthew() 119.59806 126.87538 152.28000 157.42816 415.27231 100
# Arun(vec) 32.93695 37.78204 40.99725 43.19757 98.69791 100

关于r - 给定一个向量 c(a1, a2, a3),如何在 R 中生成 c(a1, a2, a3, a2, a3, a3)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19621708/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com