如何在Julia中使用'ModelMatrix'对象进行矩阵乘法?
我对R中的如何在Julia中使用'ModelMatrix'对象进行矩阵乘法?,matrix,dataframe,julia,Matrix,Dataframe,Julia,我对R中的DataFrame没有经验,实际上我也不理解ModelMatrix 我使用它将DataFrame对象传输到一个“矩阵”中,其中一个额外的列完全由1个值组成。这有助于线性回归。但是,我发现Julia不支持ModelMatrix的矩阵乘法 当我尝试时: # feature is a DataFrames.ModelMatrix{Array{Float64,2}} object println(feature' * feature) 我得到了以下错误: ERROR: LoadError
DataFrame
没有经验,实际上我也不理解ModelMatrix
我使用它将DataFrame
对象传输到一个“矩阵”中,其中一个额外的列完全由1个值组成。这有助于线性回归。但是,我发现Julia不支持ModelMatrix
的矩阵乘法
当我尝试时:
# feature is a DataFrames.ModelMatrix{Array{Float64,2}} object
println(feature' * feature)
我得到了以下错误:
ERROR: LoadError: MethodError: no method matching *(::DataFrames.ModelMatrix{Array{Float64,2}}, ::DataFrames.ModelMatrix{Array{Float64,2}})
如果试图使用以下方法将ModelMatrix
转换为Array
:
feature_array = convert(Array, feature)
然后出现了一个错误:
ERROR: LoadError: MethodError: Cannot `convert` an object of type DataFrames.ModelMatrix{Array{Float64,2}} to an object of type Array{T,N}
因此,我想知道如何将ModelMatrix
转换为Julia可以进行矩阵乘法(*)的另一个对象,比如Array
?如果您检查,您可以看到该对象有一个属性m
,它是基础矩阵的值。您可以使用mm.m
(其中mm
是ModelMatrix
)将其拉出
例子:
生成模型矩阵
:
使用模型矩阵
:
如果选中,则可以看到对象有一个属性m
,它是基础矩阵的值。您可以使用mm.m
(其中mm
是ModelMatrix
)将其拉出
例子:
生成模型矩阵
:
使用模型矩阵
:
julia> using DataFrames
julia> df = DataFrame(X = randn(4), Y = randn(4), Z = randn(4))
4×3 DataFrames.DataFrame
│ Row │ X │ Y │ Z │
├─────┼──────────┼────────────┼──────────┤
│ 1 │ 0.766271 │ 0.669007 │ 0.232803 │
│ 2 │ 2.08208 │ 0.239115 │ 0.855068 │
│ 3 │ -1.48009 │ 0.00220079 │ 0.105638 │
│ 4 │ -1.57438 │ 0.650456 │ 0.557467 │
julia> mf = ModelFrame(Z ~ X + Y, df)
DataFrames.ModelFrame(4×3 DataFrames.DataFrame
│ Row │ Z │ X │ Y │
├─────┼──────────┼──────────┼────────────┤
│ 1 │ 0.232803 │ 0.766271 │ 0.669007 │
│ 2 │ 0.855068 │ 2.08208 │ 0.239115 │
│ 3 │ 0.105638 │ -1.48009 │ 0.00220079 │
│ 4 │ 0.557467 │ -1.57438 │ 0.650456 │
...
julia> mm = ModelMatrix(mf)
DataFrames.ModelMatrix{Array{Float64,2}}(4x3 Array{Float64,2}:
1.0 0.766271 0.669007
1.0 2.08208 0.239115
1.0 -1.48009 0.00220079
1.0 -1.57438 0.650456 ,[0,1,2])
julia> m = mm.m
4x3 Array{Float64,2}:
1.0 0.766271 0.669007
1.0 2.08208 0.239115
1.0 -1.48009 0.00220079
1.0 -1.57438 0.650456
julia> m * rand(3,1)
4x1 Array{Float64,2}:
1.9474
3.08515
-0.522879
-0.371708