'MatrixType' object does not support item assignment


请问大佬们,这是为什么啊???

你好:wave: 这个是不是在 ti.kernel 外面尝试给 Matrix 赋值?请提供一下 Matrix 的声明部分和更多的上下文这样方便分析问题所在~

1 个赞

在查看最新版的手册后,尝试如下代码定义一个矩阵,但似乎是不能够赋值的(也就是原帖子提示的错误),那这种定义方式是什么作用呢?

A = ti.types.matrix(n,n,dtype=ti.f32)

原demo中,如下定义一个矩阵会报错,是因为新版Taichi取消了var的定义方式吗?

A = ti.var(dt=ti.f32, shape=(n, n))

在查看最新版的手册后,尝试使用如下代码定义矩阵时,该矩阵是可以赋值并正常使用,但是以field的形式定义矩阵完成这项工作(指雅可比迭代法)是不是最简洁合适的?

A = ti.Matrix.field(n,n,dtype=ti.f32,shape=())

d99058d69ffd9047b0ec6db561f53fe
以上是我的三个问题,感谢您的解答!

这种定义的意义是定义一个 matrix 类型,使你可以建立这种类型的对象。比如说,当你定义了 A = ti.types.matrix(2, 2, dtype=ti.f32) 以后,你可以用 matrixA = A(1, 1, 1, 1) 来初始化一个 2 x 2 的元素都是 1 的 matrix. 详情请见文档:Type System | Taichi Docs

1 个赞

对,现在 Taichi 中对应 var 的东西是 ti.field,请见文档:Fields | Taichi Docs

1 个赞

这样定义的意思是定义一个 ti.field 其中元素为一个 Matrix,如果你仅仅想表达一个矩阵,而不是一个元素为矩阵的 field,可以考虑直接用 ti.filed(dtype=ti.f32, shape(n, n)), 是更加直观的方法

1 个赞