矩阵
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)
参数: |
|
---|
例如, 以下创建了一个由 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, …], …])
参数: |
|
---|
例如,下述将创建一个 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, …])
参数: |
|
---|
例如,以下代码创建了一个 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[6,3]
的第一个元素:
x = a[6, 3][0, 0]
# 或者
mat = a[6, 3]
x = mat[0, 0]
注解
访问矩阵形式张量中的标量元素时, 必须 使用两对方括号。
- 第一对方括号中的索引定位张量中的矩阵;
- 第二对方括号中的索引定位矩阵中的标量元素。
对于0维的矩阵形式的张量,第一对方括号中的索引应该为 [None]
。
作为一个临时的本地变量
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 作用域内有效。