Shape

class onnx_ir.Shape(dims, /, denotations=None, frozen=False)

表示张量的形状,包括其维度和可选的标记。

Shape 类存储张量的维度,可以是整数、None(未知)或符号维度。它提供了查询和操作形状的方法,以及将形状与其它形状或普通 Python 列表进行比较的方法。

形状可以被冻结(使其不可变)。当形状被冻结后,它不能被解冻,这使其适合在张量或值之间共享。调用 freeze() 来冻结形状。

要更新冻结形状的维度,请调用 copy() 来创建一个具有相同维度且可修改的新形状。

使用 get_denotation()set_denotation() 来访问和修改标记。

注意

两个形状可以进行相等性比较。在比较具有未知维度(None)的形状时要小心,因为即使所有维度都相同,它们也可能不被视为语义上相等。你可以使用 has_unknown_dim() 来检查形状是否具有任何未知维度。

示例

>>> import onnx_ir as ir
>>> shape = ir.Shape(["B", None, 3])
>>> shape.rank()
3
>>> shape.is_static()
False
>>> shape.is_dynamic()
True
>>> shape.is_static(dim=2)
True
>>> shape[0] = 1
>>> shape[1] = 2
>>> shape.dims
(1, 2, 3)
>>> shape == [1, 2, 3]
True
>>> shape.frozen
False
>>> shape.freeze()
>>> shape.frozen
True
参数:
dims

表示形状的维度元组。每个维度可以是整数、None 或 SymbolicDim

frozen

指示形状是否不可变。当冻结时,形状无法修改或解冻。

copy(frozen=False)[source]

返回形状的副本。

参数:

frozen (bool)

property dims: tuple[int | SymbolicDim, ...]

形状中的所有维度。

此属性为只读。使用 __getitem__ 和 __setitem__ 来修改形状或创建新形状。

display(*, page=False)

漂亮地打印对象。

参数:

page (bool) – 是否分页输出。

返回类型:

freeze()[source]

冻结形状。

当形状被冻结时,它不能被解冻,这使其适合共享。

返回类型:

property frozen: bool

形状是否冻结。

当形状被冻结时,它不能被解冻,这使其适合共享。调用 freeze() 来冻结形状。调用 copy() 来创建一个具有相同维度且可修改的新形状。

get_denotation(index)[source]

返回索引处维度的标记。

参数:

index (int) – 维度的索引。

返回:

维度的标记。

返回类型:

str | None

has_unknown_dim()[source]

如果任何维度未知(None),则返回 True。

你可以使用 is_unknown_dim() 来检查特定维度是否未知。

新增于 0.1.10 版本。

返回类型:

布尔

is_dynamic(dim=None)[source]
返回类型:

布尔

is_static(dim=None)[source]

如果维度是静态的,则返回 True。如果 dim 为 None,则所有维度都是静态的返回 True。

返回类型:

布尔

is_unknown_dim(dim)[source]

如果维度未知(None),则返回 True。

没有符号名称的动态维度被认为是未知的。

新增于 0.1.10 版本。

参数:

dim (int) – 维度的索引。

返回类型:

布尔

numpy()[source]
返回类型:

tuple[int, …]

rank()[source]

此形状表示的张量的秩。

返回类型:

int

set_denotation(index, denotation)[source]

设置索引处维度的标记。

参数:
  • index (int) – 维度的索引。

  • denotation (str | None) – 维度的标记。

返回类型: