怎么在taichi scope里面初始化一个高维的Matrix啊

没有类似np.ones之类的方法吗?
看API文档也没什么好方法,创建一个333的矩阵难道只能ti.Matrix([[[0] * 3] * 3] * 3)这么写吗?

1 个赞

没有用啊,这样出来的最后一维里面是list不能索引。。。

1 个赞

也许可以开一个 field 来存这些临时的 matrix。
或者也可以试着用 ti.static 的方法循环展开来访问 list 内元素。

开一个field可行,但是这个field会很大。我现在弄这个矩阵是想循环里面初始化内容的,我现在解决办法是rgb分别建立一个3乘3矩阵,但是在循环里面没法赋值。
for weight_x_idx in range(3):
for weight_y_idx in range(3):
#这边还有计算得到y_idx和x_idx的一步
r_matrix[0, 0] = matrix[y_idx, x_idx, 0] # 这个不会报错
r_matrix[weight_y_idx, weight_x_idx] = matrix[y_idx, x_idx, 0] # 会报错
是没有办法这样初始化吗?还是可以通过你说的ti.static来处理

taichi scope 里面应该用不了三维的临时 tensor,要么搞一个 list of matrices, 外面 list 的下标用静态下标 (ti.static);要么干脆把三维下标压成一维的,比如 3*3*3 直接换成一个长度 27 的 vector 试试。前者可能会有点 tricky,后者应该是能稳定实现出来的。

成功了,虽然过程挺曲折的,不过加速效果很惊人,400乘400的图片本来要30秒现在只要0.3秒,2000*1000的图片加速以后也才0.38秒,本来得好几分钟。

4 个赞

欢迎你说说曲折过程,我已经搬个小板凳来了