Julia对矩阵进行预先赋值

   我们知道,对于MATLAB和JULIA 而言,预先赋值可以获得更快的运算速度,特别是MATLAB. 由于JULIA 经常用循还解决相关问题,预先赋值使用的频率相比MATLAB而言大大减小。不过,还是有一些地方,可能用到的,尽量不要使用CAT 操作,效率低下,速度慢得很。这个原则,还仅是对于MATLAB 还是JULIA,基本上都管用。

   和MATLAB不同,MATLAB往往是使用zeros(n,m)的方法对数值进行赋值,但不等对混合类型(有字符串和数值混在一起的)进行赋值。

  一、Julia的赋值:是对Array进行相应的操作而完成。

julia> a =Array(String,1,7) 
1x7 Array{String,2}:
 #undef  #undef  #undef  #undef  #undef  #undef  #undef


julia> b =Array(Float64,1,7)
1x7 Array{Float64,2}:
 0.0  0.0  0.0  0.0  0.0  0.0  0.0


julia> c=Array(Int64,1,7)
1x7 Array{Int64,2}:
 0  0  0  0  0  0  0


julia> h =Array(kbarData,10000) ; # 自定义类型kbarData的赋值,特别补充

有时,自定义类型还是很常见,对这个赋值有相当大的意义!

julia> e=Array(Any,3,7) 
3x7 Array{Any,2}:
 #undef  #undef  #undef  #undef  #undef  #undef  #undef
 #undef  #undef  #undef  #undef  #undef  #undef  #undef
 #undef  #undef  #undef  #undef  #undef  #undef  #undef


julia> f=Array(Int64,3,7)
3x7 Array{Int64,2}:
 0  0  0  0  0  0  0
 0  0  0  0  0  0  0
 0  0  0  0  0  0  0

julia> g=Array(String,3,7)
3x7 Array{String,2}:
 #undef  #undef  #undef  #undef  #undef  #undef  #undef
 #undef  #undef  #undef  #undef  #undef  #undef  #undef
 #undef  #undef  #undef  #undef  #undef  #undef  #undef

julia> c=Array(String,3,7)
3x7 Array{String,2}:
 #undef  #undef  #undef  #undef  #undef  #undef  #undef
 #undef  #undef  #undef  #undef  #undef  #undef  #undef
 #undef  #undef  #undef  #undef  #undef  #undef  #undef

注意:一维Array,就是一个Vector!

julia> g=Array{String,1}
Array{String,1}

julia> g=Array(String,1)
1-element Array{String,1}:
 #undef

julia> g=Array(String,7)
7-element Array{String,1}:
 #undef
 #undef
 #undef
 #undef
 #undef
 #undef
 #undef

总之,能赋值的就预先赋值,这样可能比push!大大提高效率。

二、 尽可能替代CAT函数

julia> table =["2014-9-17 15:19" 3260.0 700 3360.0 800 3620.0  12;"2014-9-18 15:
19" 3260.0 700 3360.0 800 3620.0  12]
2x7 Array{Any,2}:
 "2014-9-17 15:19"  3260.0  700  3360.0  800  3620.0  12
 "2014-9-18 15:19"  3260.0  700  3360.0  800  3620.0  12

julia> tab =["2014-9-19 15:19" 3260.0 700 3360.0 800 3620.0  12]
1x7 Array{Any,2}:
 "2014-9-17 15:19"  3260.0  700  3360.0  800  3620.0  12

julia> b=vcat(table,tab)

3x7 Array{Any,2}:
 "2014-9-17 15:19"  3260.0  700  3360.0  800  3620.0  12
 "2014-9-18 15:19"  3260.0  700  3360.0  800  3620.0  12
 "2014-9-19 15:19"  3260.0  700  3360.0  800  3620.0  12


julia> @time newtable =vcat(table,table,table);
elapsed time: 0.102088118 seconds (1039984 bytes allocated)

仅管vcat效率比较低,,因为象matlab或julia的矩阵值存储,事实上是按列来排位的,如果是vcat相当于需要精准地insert N个位置。

但是hcat效率还是很高的,因为,hcat操作相当于append在其中一块(比如,最后,最前,或某一列后),在查找定位时,至少开销少了多好,因此hcat要快。

因此,我们尽量避开cat操作。

我个人建议,在这里,可以使用循还,加快运算速度,当然,从功能上看,用cat操作简单省事,但代价是时间。

你可能感兴趣的:(Julia)