索引报错问题(IndexError)

@ti.kernel
 def initial_A(self):
         for i in range(self.size):
              self.Aobject_function_values[i] = self.get_object_function_value(self.Aindividuality[i])

您好,在运行上述代码时,出现了索引错误,self.Aobject_function_values是一个一维的ndarray对象,self.Aobject_function_values = np.empty(shape=(self.size))self.get_object_function_value是一个函数,self.Aindividuality是一个二维的ndarray对象,self.Aindividuality[i]因此也是一个数组。
运行上述代码时,发生错误:IndexError: only integers, slices (:), ellipsis (), numpy.newaxis (None) and integer or boolean arrays are valid indices
但当我删除修饰器@ti.kernel后便没有发生这种情况,请问如何解决呢?谢谢!

你好,欢迎来到Taichi社区!这里报indexerror的原因是initial_A()这个kernel内是一个Taichi range for loop,循环拿到的i不是一个int,是一个taichi expr,所以numpy array报了indexerror;要使用numpy array,可以这样写:

@ti.kernel
 def initial_A(self, Aindividuality: ti.any_arr()):
    ...

另外,taichi的array slicing目前暂时还不支持,所以对于2维的array,需要写2个for来访问每一个element

十分感谢!!

1 个赞