在太极编程代码中,我们经常会看到诸如x = ti.var(ti.i32, shape=4),a = ti.Vector([3, 4]),a = ti.Matrix.var(3, 3, dt=ti.f32, shape=(5, 4)),pixels = ti.field(dtype=float, shape=(n * 2, n))这类的代码,其中ti.field就是域。
作为特定领域编程语言,太极(taichi)编程语言还是和其他的编程语言不太一样的。比如这次学习的ti.field概念。这在太极语言中很重要也很别具一格。机智客看视频分享中,据说其创始人也很喜欢这个,因为这个名字其实挺妙的,既可以翻译成是一个域,也可以翻译为是一个场。可谓一语双关。
那么ti.field是什么,其实它是一个N维的包含各种元素的全局元素张量。当然这里的N并不一定是指代多维,也可以是指代0或1。也就是说,不同的N代表着不同的意思。比如当N=0的时候,那么它是标量。如果N=1的话,那么它就是矢量。而如果N=2的话,那么这就是一个矩阵。当然了,N还可以等于3,4,5等。
而根据文档显示,太极官方定义的是,在Taichi中,张量是全局变量。张量分为稀疏张量和密集张量。张量的元素可以是标量,也可以是矩阵。根据官方文档的说明,虽然数学上矩阵被视为2D张量,但在Taichi中, 张量 和 矩阵 是两个完全不同的概念。 矩阵可以用作张量元素,因此你可以使每个元素都是矩阵的张量。
所以作为一个全局元素,ti.field其实比较灵活,也就是在初始化后,代码开头把它定义了,它就既能在Taichi里被调用也可以在Python脚本语言里被调用。而回到文章开头那句代码pixels = ti.field(dtype=float, shape=(n * 2, n))则表示一个形状是n*2,n类型是浮点的张量。