标量组成的张量
定义
ti.``var
(dt, shape = None, offset = None)
参数: |
|
---|
例如,这将创建一个具有四个 int32
作为元素的 稠密(dense) 张量:
x = ti.var(ti.i32, shape=4)
这将创建一个元素为 float32
类型的4x3 稠密 张量:
x = ti.var(ti.f32, shape=(4, 3))
如果 shape 是 ()
(空元组),则创建一个0-D张量(标量):
x = ti.var(ti.f32, shape=())
随后通过传递 None
作为索引来访问它:
x[None] = 2
如果形状参数 未提供 或指定为 None
,则其后用户必须在手动放置 (place) 它:
x = ti.var(ti.f32)
ti.root.dense(ti.ij, (4, 3)).place(x)
# 等价于: x = ti.var(ti.f32, shape=(4, 3))
注解
通过不指定参数 shape
的写法,你可以将张量 放置 为默认的 稠密数据布局 之外的其他布局中,有关更多详细信息,请参见: Advanced dense layouts 。
警告
在任何内核调用或变量访问之前,所有变量都必须被创建和放置完毕。例如:
x = ti.var(ti.f32)
x[None] = 1 # 错误:x没有放置!
x = ti.var(ti.f32, shape=())
@ti.kernel
def func():
x[None] = 1
func()
y = ti.var(ti.f32, shape=())
# 错误:内核调用后不能再创建新的变量!
x = ti.var(ti.f32, shape=())
x[None] = 1
y = ti.var(ti.f32, shape=())
# 错误:任一变量访问过后不能再创建新的变量!
访问分量
您可以通过一个或多个索引来访问 Taichi 张量的元素。
a[p, q, ...]
参数: |
|
---|---|
返回: | (标量) |
这将提取张量 a
在索引为 [3, 4]
处的元素值:
x = a[3, 4]
这会将一维张量 b
在索引 2
处的元素值设置为 5
:
b[2] = 5
注解
在 Python 中, x[(exp1, exp2, …, expN)] 等效于 x[(exp1, exp2, …, expN)] ; 后者只是前者的语法糖。
注解
如果 a
是由 Vector
/ Matrix
构成的张量,则返回的值也可以是 Vector / Matrix,有关更多详细信息,请参见: 向量。
元数据
a.``shape
参数: | a – (张量)张量 |
---|---|
返回: | (元组)张量 a 的形状 |
x = ti.var(ti.i32, (6, 5))
x.shape # (6, 5)
y = ti.var(ti.i32, 6)
y.shape # (6,)
z = ti.var(ti.i32, ())
z.shape # ()
a.``dtype
参数: | a – (张量)张量 |
---|---|
返回: | (数据类型) a 的数据类型 |
x = ti.var(ti.i32, (2, 3))
x.dtype # ti.i32
a.``parent
(n = 1)
参数: |
|
---|---|
返回: | (结构节点) |
x = ti.var(ti.i32)
y = ti.var(ti.i32)
blk1 = ti.root.dense(ti.ij, (6, 5))
blk2 = blk1.dense(ti.ij, (3, 2))
blk1.place(x)
blk2.place(y)
x.parent() # blk1
y.parent() # blk2
y.parent(2) # blk1
有关更多详细信息,请参见 Structural nodes (SNodes) 。