ti.Expr类型怎么导出taichi架构

将taichi框架的变量传入python域其他函数时,数据类型为ti.Expr,应该怎么解析?

import numpy as np
import taichi as ti
from scipy.integrate import dblquad

ti.init(arch=ti.gpu)
x = ti.Vector.field(3, float, shape=(5, 5))
y = np.random.random((5, 5, 3))


# @ti.func
def outt(i, j):
    print(i , j)  # <ti.Expr> <ti.Expr>
    aa = lambda x, z: x * z
    bb = dblquad(aa, i[0], j[0], 3, 4)
    return bb[0]


@ti.kernel
def copy_vector(x: ti.template(), y: ti.types.ndarray()):
    for i, j in ti.ndrange(5, 5):
        print(i, j)
        for k in ti.static(range(3)):
            y[i, j, k] = x[i, j][k] + outt(i, j)  # correct
            # y[i][j][k] = x[i, j][k] incorrect
            # y[i, j][k] = x[i, j][k] incorrect


copy_vector(x, y)
# print(y)

在Taichi Kernel里面(标记了@ti.kernel的函数)原则上只能调用标记了@ti.func的函数。因此把outt上面的@ti.func反注释掉应该就可以打印出正确的结果了。

正常情况下在Python里面是不应该看到ti.Expr的

但是taichi域无法编译scipy库中的积分模块,但是想在Taichi Kernel里面调用积分函数,所以想调出taichi域的中间值

Taichi确实不能编译第三方的代码,不过你可以把想要积分的Ndarray/Field通过to_numpy()转成numpy array然后喂给scipy