是否有张量运算或者三维数据变换的编程例子?

想使用taichi代替cuda进行multi-view stereo算法的实现,但是Doc中的例子都不够理想。

请问是否有关于三维数据进行刚体变换的例子,或者射影变换等等multi-view geometry的例子?这些变换往往是对一批点做矩阵乘法进行线性变换。

还有许多小问题都无从了解,比如ti.Matrix()的赋值,ti.Matrix()能否与ti.Vector()点乘,ti.Matrix()与ti.MatrixField()有什么区别等等
比如下面的错误例子想实现矩阵乘法,正确写法是怎样的呢?

A = np.array([[0,1],[1,0]],dtype=np.float32)
b = np.array([[3],[5]],dtype=np.float32)
A_ti = ti.Matrix.field(2,2, ti.f32,shape=())
b_ti = ti.Vector.field(2, ti.f32, shape=())
A_ti.from_numpy(A)
b_ti.from_numpy(b)
A_ti[None] * b_ti[None]

我在python源码里发现乘法符号是@ :smiling_face_with_tear:,对numpy比较熟悉,用@是完全没想到的

Hi @GcC. 目前 Taichi 中的 matrix/vector field只能用来做为数据容器,但是没有相关的矩阵运算,只能自己手写。目前Taichi只支持小矩阵(注意不是field,而是field的一个element)的乘法运算。结合你的例子我该写了一下你的程序以做参考:

import taichi as ti
import numpy as np

ti.init(arch=ti.cpu)
A = np.array([[0,1],[1,0]],dtype=np.float32)
b = np.array([3, 2],dtype=np.float32)
A_ti = ti.Matrix.field(2,2, ti.f32,shape=())
b_ti = ti.Vector.field(2, ti.f32, shape=())

@ti.kernel
def compute():
    c = A_ti[None] @ b_ti[None]
    print(c)

A_ti.from_numpy(A)
b_ti.from_numpy(b)
compute()

PS: Taichi里的矩阵乘法也是用 @

1 个赞

很感谢解答。我希望未来taichi的文档可以更完善,包含更多的例子,以便Numpy用户快速上手taichi :smile:

嗯嗯, 非常感谢你的建议。我们会持续完善我们的文档。