代码之家  ›  专栏  ›  技术社区  ›  HiroIshida

Julia中任意序张量的简洁定义

  •  0
  • HiroIshida  · 技术社区  · 6 年前

    我想在Julia中定义一个任意阶张量类型。这里,张量的意思是 Vector{Vector{Vector{T}} . 我的审判程序如下:

    function Tensor(N::Int, T::DataType)
        N==0 && return eval(T)
        return Tensor(N-1, eval(Expr(:curly, :Vector, T)))
    end
    

    声明将是 data = Tensor(3, Float64)[] . 关于这个,我有两个问题。1) 有更整洁的方法吗?2) 我更喜欢用大括号声明 data = Tensor{3, Float64}[]

    1 回复  |  直到 6 年前
        1
  •  0
  •   Przemyslaw Szufel    6 年前

    假设你知道张量的大小。 让

    d = (4,3,2) 
    

    1. 零数组

    使用 zeros()

    julia> zeros(Float64,d)
    4×3×2 Array{Float64,3}:
    [:, :, 1] =
     0.0  0.0  0.0
     0.0  0.0  0.0
     0.0  0.0  0.0
     0.0  0.0  0.0
    
    [:, :, 2] =
     0.0  0.0  0.0
     0.0  0.0  0.0
     0.0  0.0  0.0
     0.0  0.0  0.0
    
    1. 未初始化(更快,请注意垃圾值)

    使用 Array

    julia> x = Array{Float64,length(d)}(undef,d) 
    4×3×2 Array{Float64,3}:                      
    [:, :, 1] =                                  
     5.34466e-316  5.34466e-316  5.34467e-316    
     5.34466e-316  5.34467e-316  5.34467e-316    
     5.34466e-316  5.34467e-316  5.34467e-316    
     5.34466e-316  1.51858e-316  5.34468e-316    
    
    [:, :, 2] =                                  
     1.51858e-316  5.34487e-316  0.0             
     1.51858e-316  5.34487e-316  0.0             
     1.51858e-316  5.34429e-316  0.0             
     1.51858e-316  5.16938e-316  0.0