矩阵¶
ti.Matrix
只适用于小矩阵(如3x3)。如果要使用 64x64 的矩阵,你可以用标量构成的二维张量。ti.Vector
和ti.Matrix
相同,只不过它只有一列。- 注意区分逐元素的乘法
*
和矩阵乘法@
。 ti.Vector(n, dt=ti.f32)
或ti.Matrix(n, m, dt=ti.f32)
用来创建向量/矩阵构成的张量。A.transpose()
R, S = ti.polar_decompose(A, ti.f32)
U, sigma, V = ti.svd(A, ti.f32)
(其中sigma
是一个3x3
矩阵)- ``any(A)``(仅 Taichi 作用域)
- ``all(A)``(仅 Taichi 作用域)
TODO: doc here better like Vector. WIP
Taichi中的矩阵有两种形式:
- 作为临时局部变量。一个由
n*m
个标量构成的n×m
阶矩阵。- 作为全局张量的一个成员。在这种情况下, 张量是一个由
n×m
阶矩阵构成的N-维的数组。
定义¶
作为全局张量的矩阵¶
-
ti.Matrix.
var
(n, m, dt, shape = None, offset = None)¶ 参数: - n – (标量)矩阵的行数
- m – (标量)矩阵的列数
- dt – (数据类型)元素的数据类型
- shape – (可选,标量或元组)向量张量的形状,见 张量与矩阵
- offset – (可选,标量或元组)请参见 Coordinate offsets
例如, 以下创建了一个由 3x3 矩阵构成的 5x4 的张量:
# Python-scope a = ti.Matrix.var(3, 3, dt=ti.f32, shape=(5, 4))
注解
在 Python-scope 中, ti.var
声明了 Tensors of scalars , ti.Matrix
声明了由矩阵组成的张量。
作为一个临时的本地变量¶
-
ti.
Matrix
([[x, y, ...][, z, w, ...], ...])¶ 参数: - x – (标量)第一行第一个元素
- y – (标量)第一行第二个元素
- z – (标量)第二行第一个元素
- w – (标量)第二行第二个元素
例如,下述将创建一个 2x3 的矩阵,第一行中的分量为 (2, 3, 4) ,第二行的为 (5, 6, 7) 中:
# Taichi-scope a = ti.Matrix([[2, 3, 4], [5, 6, 7]])
-
ti.Matrix.
rows
([v0, v1, v2, ...])¶
-
ti.Matrix.
cols
([v0, v1, v2, ...])¶ 参数: - v0 – (向量)组成第一行(列)元素的向量
- v1 – (向量)组成第二行(列)元素的向量
- v2 – (向量)组成第三行(列)元素的向量
例如,以下代码创建了一个 3x3 矩阵,矩阵的行(列)是由向量拼接构成的:
# Taichi 作用域 v0 = ti.Vector([1.0, 2.0, 3.0]) v1 = ti.Vector([4.0, 5.0, 6.0]) v2 = ti.Vector([7.0, 8.0, 9.0]) # 指定行中的数据 a = ti.Matrix.rows([v0, v1, v2]) # 指定列中的数据 a = ti.Matrix.cols([v0, v1, v2]) # 可以用列表代替参数中的向量 a = ti.Matrix.rows([[1.0, 2.0, 3.0], [4.0, 5.0, 6.0], [7.0, 8.0, 9.0]])
元素访问¶
作为全局的由向量构成的张量¶
-
a[p, q, ...][i, j]
参数: - a – (矩阵构成的张量)张量名
- p – (标量)张量的第一维的索引
- q – (标量)张量的第二维的索引
- i – (标量)矩阵的行索引
- j – (标量)矩阵的列索引
以下代码用以访问矩阵
a[6,3]
的第一个元素:x = a[6, 3][0, 0] # 或者 mat = a[6, 3] x = mat[0, 0]
注解
访问矩阵形式张量中的标量元素时, 必须 使用两对方括号。
- 第一对方括号中的索引定位张量中的矩阵;
- 第二对方括号中的索引定位矩阵中的标量元素。
对于0维的矩阵形式的张量,第一对方括号中的索引应该为 [None]
。
作为一个临时的本地变量¶
-
a[i, j]
参数: - a – (矩阵)该矩阵本身
- i – (标量)矩阵的行索引
- j – (标量)矩阵的列索引
比如,访问矩阵
a
第0行第1列的元素:x = a[0, 1]
将
a
第1行第3列的元素设置为4:a[1, 3] = 4
方法¶
-
a.
transpose
()¶ 参数: a – (矩阵)该矩阵本身 返回: (矩阵) a
的转置矩阵 。例如:
a = ti.Matrix([[2, 3], [4, 5]]) b = a.transpose() # 现在 b = ti.Matrix([[2, 4], [3, 5]])
注解
a.transpose()
不会影响a
中的数据,它只是返回结果。
-
a.
trace
()¶ 参数: a – (矩阵)该矩阵本身 返回: (标量) a
矩阵的迹。返回值可以计算为
a[0, 0] + a[1, 1] + ...
。
-
a.
determinant
()¶ 参数: a – (矩阵)该矩阵本身 返回: (标量) a
矩阵的行列式。注解
目前用于此函数的矩阵大小必须为 1x1、2x2、3x3 或 4x4。
此函数目前仅在 Taichi 作用域内有效。
-
a.
inverse
()¶ 参数: a – (矩阵)该矩阵本身 返回: (矩阵) a
的逆矩阵。注解
目前用于此函数的矩阵大小必须为 1x1、2x2、3x3 或 4x4。
此函数目前仅在 Taichi 作用域内有效。