假设我有一个变量i = [1,3,5],它是在我对数组应用过滤器时获得的。现在,假设这个数组有 10 个元素,我想获得“补”索引。我的意思是,我想获得ic = [2,4,6,7,8,9,10].
是否有一种干净而简短的方法来获得这个索引的补充列表?
我的意思是,我可以用常规循环来做到这一点,但是有没有办法通过列表理解来做到这一点?
我正在使用 Julia 的 DataFrames.jl 包。在其中,我有一个数据框,其中包含一个包含字符串列表的列(例如 ["Type A"、"Type B"、"Type D"])。那么如何执行one-hot编码?我无法在 DataFrames.jl 包中找到预构建的函数。
这是我想要做的一个例子:
Original Dataframe
col1 | col2 |
102 |[a] |
103 |[a,b] |
102 |[c,b] |
Run Code Online (Sandbox Code Playgroud)
After One-hot encoding
col1 | a | b | c |
102 | 1 | 0 | 0 |
103 | 1 | 1 | 0 |
102 | 0 | 1 | 1 |
Run Code Online (Sandbox Code Playgroud) 您可以定义一个函数来将其关键字参数传递给内部函数,如下所示:
function example(data;xcol,ycol,kwargs...)
DoSomething(; spec=:EX, x=xcol, y=ycol, kwargs...)
end
Run Code Online (Sandbox Code Playgroud)
现在,该函数DoSomething接受许多参数,例如color. 这适用于函数,但我想用 VegaLite.jl 中的宏来做到这一点:
function example(data;xcol,ycol,kwargs...)
@vlplot(data=data,mark=:point, x=xcol, y=ycol,kwargs...)
end
example(df,xcol=:Miles_per_Gallon, ycol=:Horsepower, color=:Origin)
Run Code Online (Sandbox Code Playgroud)
请注意,上面的代码不起作用。
当我在 Julia 中编写程序包时,我编写了几个类似的函数:
function scatterplot(data; x_col=:x, y_col=:y)
data |> @vlplot(:circle, x=x_col, y=y_col)
end
Run Code Online (Sandbox Code Playgroud)
现在的问题是,我实际上想kwargs在这个函数中实现,比如:
function scatterplot(data; x_col=:x, y_col=:y; kwargs...)
data |> @vlplot(:circle, x=x_col, y=y_col;kwargs...)
end
Run Code Online (Sandbox Code Playgroud)
但由于@vlplot 是一个宏,这实际上不起作用。所以我需要实际使用元编程如下:
function example(data;xcol,ycol,kwargs...)
x = kwargs
expression = "@vlplot(data=$data,mark=:point, x=$xcol, y=$ycol,"
for (k,v) in x
add = string(k,"=",v,",")
expression = expression*add
end
expression = expression[1:end-1]*")"
return expression
end
Run Code Online (Sandbox Code Playgroud)
问题是,如果我想使用“kwargs”,我想避免为我的每个函数编写这个循环,因此,如何做到这一点?
我的想法是以某种方式“装饰”每个功能,例如@decorate_with_kwargs scatterplot. 这可能吗?
我有一个只包含数值的 DataFrame。现在,我想做的是将这个 DataFrame 的所有值提取为一个数组。我怎样才能做到这一点?我知道对于单列,如果我这样做df[!,:x1],那么输出是一个数组。但是如何对所有列执行此操作?
我想知道为什么在 Haskell(以及一般的 FP)中函子(例如Maybe函子)被定义为
data Maybe a = Nothing | Just a
Run Code Online (Sandbox Code Playgroud)
而不是简单地
data Maybe a = Nothing | a
Run Code Online (Sandbox Code Playgroud)
第二个选项仍然是函子,因为Maybe函子将 type 转换a为 type Nothing + a。我缺少什么?
我必须数组,一个包含权重,另一个包含类别(例如w=[3, 4, 1, 2],x= ["a","b","c","c"])。现在,我想x使用权重数组对数组进行排序。如何用最少的代码做到这一点?有没有办法对数组进行排序并获取相应的索引,以便您可以在任何其他具有相同大小的数组中使用这种新的排序顺序?
我知道可以使用 DataFrames 来做到这一点,但我正在寻找一种方法来做到这一点而不诉诸于那个。
如何在 Julia 中找到我的软件包版本?是否有显示正在使用的版本的命令?
在 Julia 中,将矩阵对角线变成零的有效方法是什么?
我正在 Julia 中开发一个包,我创建了一些函数并发送了拉取请求。我现在正在等待主分支接受它。同时,我希望能够将该包与我刚刚在 Jupyter Notebook 中实现的当前功能一起使用。
如何将包的开发版本与 Jupyter Notebook 一起使用?
在 Julia 中,如果我 make x = rand(10,2),那么
>> typeof(x)
Matrix{Float64} (alias for Array{Float64, 2})
Run Code Online (Sandbox Code Playgroud)
如何访问类型参数,即如何获得数组x是Float64and的数组2?