我想从带有噪声的线性模型 (Y = X*w + e) 生成数据,我可以在其中指定输入向量 X 和标量噪声 e 的分布。为此,我指定了以下结构
using Distributions
struct NoisyLinearDataGenerator
x_dist::ContinuousMultivariateDistribution
noise_dist::ContinuousUnivariateDistribution
weights::Vector{Float64}
end
Run Code Online (Sandbox Code Playgroud)
以及从中生成 N 个点的函数:
function generate(nl::NoisyLinearDataGenerator, N)
x = rand(nl.x_dist, N)'
e = rand(nl.noise_dist, N)
return x, x*nl.weights + e
end
Run Code Online (Sandbox Code Playgroud)
这似乎有效,但类型不稳定,因为
nl = NoisyLinearDataGenerator(MvNormal(5, 1.0), Normal(), ones(5))
@code_warntype generate(nl,1)
Run Code Online (Sandbox Code Playgroud)
产量
Variables
#self#::Core.Compiler.Const(generate, false)
nl::NoisyLinearDataGenerator
N::Int64
x::Any
e::Any
Body::Tuple{Any,Any}
1 ? %1 = Base.getproperty(nl, :x_dist)::Distribution{Multivariate,Continuous}
? %2 = Main.rand(%1, N)::Any
? (x = Base.adjoint(%2))
? %4 = Base.getproperty(nl, :noise_dist)::Distribution{Univariate,Continuous}
? (e = …Run Code Online (Sandbox Code Playgroud) 我想选择DataFrame的所有列,其中数据类型是的子类型Number。但是,由于存在带有missing值的列,因此数字列数据类型可能类似于Union{Missing, Int64}。
到目前为止,我想到了:
using DataFrames
df = DataFrame([["a", "b"], [1, missing] ,[2, 5]])
df_numerical = df[typeintersect.(colwise(eltype, df), Number) .!= Union{}]
Run Code Online (Sandbox Code Playgroud)
这产生了预期的结果。
题
有没有更简单,惯用的方式来做到这一点?可能类似于:
df.select_dtypes(include=[np.number])
Run Code Online (Sandbox Code Playgroud)