请问为什么不可以这样给向量赋值?

import taichi as ti
ti.init(arch=ti.cuda)
q = ti.types.vector(9, float)(0,0,0,0,0,0,0,0,0)
print(type(q))

@ti.kernel
def te2():
    q[0] = 12.
    q[0] +=1.


te2()
print(q)

[Taichi] version 1.6.0, llvm 15.0.1, commit f1c6fbbd, win, python 3.11.3
[Taichi] Starting on arch=cuda
<class 'taichi.lang.matrix.Vector'>
Traceback (most recent call last):
  File "C:\Users\Administrator\Desktop\LBM_Taichi\test.py", line 14, in <module>
    te2()
  File "C:\ProgramData\Anaconda3\envs\lbm\Lib\site-packages\taichi\lang\kernel_impl.py", line 976, in wrapped
    raise type(e)("\n" + str(e)) from None
taichi.lang.exception.TaichiSyntaxError: 
File "C:\Users\Administrator\Desktop\LBM_Taichi\test.py", line 10, in te2:
    q[0] = 12.
    ^^^^^^^^^^
Variable 'q[0]' cannot be assigned. Maybe it is not a Taichi object?

好像在kerenl能赋值的只有field类的变量,其他的只能当常量用

import taichi as ti
ti.init(arch = ti.cuda)

vector_field = ti.Vector.field(9, float, shape = 2)
vector_type = ti.types.vector(9, float)
vector_type = [0, 1, 2, 3, 4, 5, 6, 7, 8]

@ti.kernel
def test():
    vector_field[0][5] = 10
    vector_field[0][5] += 1
    vector_field[1] = vector_type
test()
print(vector_field)

这就可以运行

[Taichi] version 1.6.0, llvm 15.0.1, commit f1c6fbbd, win, python 3.10.9
[Taichi] Starting on arch=cuda
[[ 0.  0.  0.  0.  0. 11.  0.  0.  0.]
 [ 0.  1.  2.  3.  4.  5.  6.  7.  8.]]
2 个赞

ti.vector是没法直接在kernel内外共同使用的,除了@liuyunpu提到的field以外,你也可以把它包装成ndarray来传递到kernel中

2 个赞