Taichi传参问题

taichi加速函数时要设置参数的类型
例如整型默认是i32,浮点型默认是f32,可我没找到字符串应该怎么声明 我用str或string会报错
感谢您的回复!

你好,一般来说可以用ti.i32, ti.f32等内置的数据类型进行声明,详细操作方法可以参考文档:Type system | Taichi Docs

如果还不能解决你的问题的话,可以麻烦你贴一下出错的代码嘛?

@ti.kernel
def cal(code:str):

@ti.kernel
def cal(code:string):

上面两段函数定义代码都不能正常运行
感谢大佬回复 内置数据类型我没找到字符串相关的

目前ti.kernel确实不支持传入string类型的变量,传进去Kernel里面似乎也无法处理。可以问一下传入String进去具体想要做什么嘛?

1 个赞

我写的程序需要传字符串的参数 而且很多
不支持字符串参数有点奇怪啊

目前在Kernel里面是不支持字符串的,但是字符串操作可以在Python里面(Taichi Kernel外面)进行。

方便问一下您想在Kernel里使用字符串做什么操作吗?可以写一点伪代码一类的,我可以想想有没有其他方法可以解决?

参数传入文件名

函数内拼接文件名与路径读取文件

这样比较建议在Python里先读取文件数据,然后把读出来的数据传入到Kernel里进行处理。比如:

@ti.kernel
def process_file_data(data: ti.types.ndarray()):
    ...
if __name__ == "__main__":
  data1 = np.fromfile(open("file1", "r"))
  process_file_data(data1)
  data2 = np.fromfile(open("file2", "r"))
  process_file_data(data2)

Taichi Kernel是可以支持传入numpy array的,具体使用方法可以参考文档:Interacting with external arrays | Taichi Docs

1 个赞

请问读出来的是pandas的dataframe 怎么转成其它taichi可以用的模式传参,再被 @ti.kernel修饰的函数内转为dataframe进行处理

可以把dataframe转成numpy array: pandas.DataFrame.to_numpy — pandas 1.4.3 documentation

Taichi Kernel是默认可以接受numpy array的,只要把参数类型设置为ti.types.ndarray()即可,编译器会根据传入的实际类型自行判断:

@ti.kernel
def process_file_data(data: ti.types.ndarray()):
    .....

process_file_data(dataframe0.to_numpy())

Taichi Kernel在设计上是专门用来加速数值计算的,也因此内部不支持支持第三方库(Pandas等)的数据结构,而是需要用Taichi的原生数据类型。一般建议是把数值部分抽取出来(比如转成numpy array)然后传入Kernel中专门对数据运算进行加速。

所以在Taichi Kernel内部恐怕不能继续用dataframe,在Kernel内你可以把他当成一个数组来使用。

1 个赞