maxframe.tensor.reshape#

maxframe.tensor.reshape(a, newshape, order='C')[源代码]#

在不改变数据的情况下,为张量提供一个新的形状。

参数:
  • a (array_like) -- 需要重塑形状的张量。

  • newshape (int or tuple of ints) -- 新形状应与原始形状兼容。如果是一个整数,则结果将是一个长度为该值的一维张量。其中一个形状维度可以是 -1,在这种情况下,该值会根据张量的长度和其他维度推断出来。

  • order ({'C', 'F', 'A'}, optional) -- 使用此索引顺序读取 a 的元素,并使用相同的索引顺序将元素放入重塑后的数组中。'C' 表示使用类似 C 的索引顺序读取/写入元素,最后一个轴索引变化最快,第一个轴索引变化最慢。'F' 表示使用类似 Fortran 的索引顺序读取/写入元素,第一个索引变化最快,最后一个索引变化最慢。请注意,'C' 和 'F' 选项不考虑底层数组的内存布局,仅指索引顺序。如果 a 在内存中是 Fortran 连续 的,则 'A' 表示按类似 Fortran 的索引顺序读取/写入元素,否则按类似 C 的顺序。

返回:

reshaped_array -- 如果可能的话,这将是一个新的视图对象;否则,它将是一个副本。

返回类型:

Tensor

参见

Tensor.reshape

等效方法。

备注

并不总是可以在不复制数据的情况下更改张量的形状。如果你希望在复制数据时引发错误,你应该将新的形状赋值给数组的 shape 属性:

>>> import maxframe.tensor as mt
>>> a = mt.arange(6).reshape((3, 2))
>>> a.execute()
array([[0, 1],
       [2, 3],
       [4, 5]])

你可以将重塑操作理解为首先将张量展平(使用给定的索引顺序),然后将展平后的张量中的元素以与展平时使用的相同索引顺序插入到新的张量中。

>>> mt.reshape(a, (2, 3)).execute()
array([[0, 1, 2],
       [3, 4, 5]])
>>> mt.reshape(mt.ravel(a), (2, 3)).execute()
array([[0, 1, 2],
       [3, 4, 5]])

示例

>>> a = mt.array([[1,2,3], [4,5,6]])
>>> mt.reshape(a, 6).execute()
array([1, 2, 3, 4, 5, 6])
>>> mt.reshape(a, (3,-1)).execute()       # the unspecified value is inferred to be 2
array([[1, 2],
       [3, 4],
       [5, 6]])