Taishi的類型使用,包括有類型轉換,張量與矩陣等。
- Type system
Taichi所支持的基本類型:
int32 ti.i32
int64 ti.i64
float32 ti.f32
float64 ti.f64
布爾類型用ti.i32。
類型轉換:用ti.cast來進行類型轉換。
例如:
a = 1.4
b = ti.cast(a, ti.i32)
c = ti.cast(b, ti.f32)
# Element-wise casts in matrices
mat = ti.Matrix([[3.0, 0.0], [0.3, 0.1]])
mat_int = mat.cast(int)
mat_int2 = mat.cast(ti.i32)
- Matrices矩陣
ti.Matrix 是針對小矩陣如3x3,如果要用64x64,則應該用scalar的2D張量。
ti.Vector 與ti.Matrix相似,只是ti.Vector僅用一列表示。也就是說ti.Vector是ti.Matrix的一個特例。
Tensors and matrices張量與矩陣
張量是Taichi支持的全局變量,張量的一個元素可以是一個標量,也可以是一個Vector或Matrix。
張量既可以是稀疏的,或是稠密的。
在Taichi中,張量與矩陣是2個完全不同的事物,矩陣可以作為張量的元素,也就是說可以有矩陣的張量。
- 標量的張量
-每個全局變量是一個n維的張量。
-全局標量是0維張量。
-張量可以用索引來訪問,如x[i, j, k],甚至當訪問0維張量時,可以用x[None] = 0來代替x = 0.所以
儘量用索引來訪問張量。
-張量的初始化是為0
-稀疏張量是初始化為不活動的。
- 矩陣的張量
-建議:如果要有一個128x64的全局表格A,每個節點容納一個3x2的矩陣。這個情況下需要分配一個3
x2矩陣的128x64張量,如下A = ti.Matrix(3, 2, dt=ti.f32, shape=(128, 64))
--如果你要得到表格的i,j的節點,可以用mat = A[i, j],那麼mat就是一個3x2的矩陣。
--如果要得到矩陣的第一行,第二列的元素,則用mat[0, 1]或A[i, j][0, 1]。
- 矩陣的size
為了性能考慮,矩陣的size一般是2x1, 3x3, 4x4等,對於32x6,則認為是太大了,對於矩陣來說,不建議用。
最好是用張量代替矩陣。如用ti.Matrix(3, 2, dt=ti.f32, shape=(64, 32));
不用ti.Matrix(64, 32, dt=ti.f32, shape=(3, 2))。
閱讀更多 AI踐行者 的文章