我想在Julia中定义一个任意阶张量式类型。在这里,类似Tensor的含义类似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}[]
之类的括号而不是括号来声明。我该如何通过元编程做到这一点?
答案 0 :(得分:0)
假设您知道张量的大小。 让
d = (4,3,2)
是张量的大小。您可以通过两种方式创建它:
使用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
使用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