朱莉娅 - 相当于R&#39的rep()与时间论证

时间:2016-07-15 16:14:53

标签: vector julia

我正在寻找一种惯用而紧凑的方式在朱莉娅实现我将在R中做什么

v1=1:5;v2=5:1;out=rep(v1,times=v2);out
# 1 1 1 1 1 2 2 2 2 3 3 3 4 4 5

即。复制向量v1中的每个元素多次由向量v2中的相应元素给出。有什么想法吗?

2 个答案:

答案 0 :(得分:2)

以下是使用数组理解的一个选项:

v1 = 1:5;
v2 = 5:-1:1;

out = vcat([ [v1[idx] for n = 1:v2[idx]] for idx = 1:length(v1) ]...)

此外,如果您想要更接近R语法的东西,可以使用RLEVectors包中的rep()函数:

## Pkg.add("RLEVectors")
using RLEVectors
out2 = rep(collect(v1), each = collect(v2))

按原样,out2将是具有运行长度编码的向量。它将与大多数其他向量类似地起作用,在某些情况下具有存储器和计算加速。但是,如果你想要一个常规的矢量,只需使用collect(out2)

答案 1 :(得分:2)

尝试使用VectorizedRoutines.jl

# Pkg.clone("https://github.com/ChrisRackauckas/VectorizedRoutines.jl")
# Will be Pkg.add("VectorizedRoutines") after being added to package system
using VectorizedRoutines
v1=1:5
v2 = 5:-1:1
R.rep(v1,each = v2)

该实现基于RLEVectors.jl通过aireties的建议(改进了输入,因此您不必收集)。

这是一个我开始将R / MATLAB / Python中的所有矢量化例程聚集在一起的软件包,以便将函数(和想法)移植到Julia更容易。随意在Github存储库上打开问题,以获取实现函数的建议,在我应该了解的其他包中实现的函数,与其他语言不匹配的语法,或者是否存在任何其他问题。如果您实现这样的任何功能,也可以随意提出拉取请求。如果您需要帮助,请不要害怕提出基本功能的拉动请求,我可以帮助您。