Dr-How
#1
我试图用 Taichi 和 arblib(通过 python-flint)协作。为此我在 @ti.kernel
下设了一个
for i, j in pixels:
z = ti.Vector([i/n-1, j/n-0.5])*2
但是我无法将 z 转换成一个 acb 的复数类型。我尝试了
w = flint.acb(z[0],z[1])
在 Taichi-scope 报错
TypeError: cannot create acb from type <class 'taichi.lang.expr.Expr'>
在 Python-scope 报错
AssertionError: __getitem__ cannot be called in Taichi-scope
强制 float 也没有用。请教这里应该怎么转换。
Dr-How
#2
我做了一些尝试后,现在问题集中在下面这段代码:
@ti.kernel
def paint():
for i,j in pixels:
z = flint.acb(i/n - 0.5, j/n - .5)
我试图将像素点转成 arblib 里的复数。这里的问题是 i, j 并没有被当做普通的整数处理,而是处理成了 Expr 类型。我尝过了使用to_numpy
但是始终没有成功。我尝试了在 python-scope 里操作,是成功的,但是会失去并行的优势。
YuPeng
#3
Hi, @Dr-How。 非常欢迎来到太极论坛。
首先是你不能在Taichi Scope里面使用flint
, numpy
等库函数,因为需要Taichi scope是Taichi compiler负责编译的,它不认识flint
。
to_numpy
函数可以在Python scope里面使用,用来将field转成numpy
的数组。
你是想将ti.Vector
转成 flint
中复数然后计算是么?
如果是这样,你有两种选择
- 你自己直接实现相关计算。
- 将
z
声明成一个field,然后再进行操作。
1 Like