快捷方式

torch.asarray

torch.asarray(obj: Any, *, dtype: Optional[dtype], device: Optional[DeviceLikeType], copy: Optional[bool] = None, requires_grad: bool = False) Tensor

obj 轉換為張量(tensor)。

obj 可以是以下型別之一:

  1. 一個張量(tensor)

  2. 一個 NumPy 陣列或 NumPy 標量

  3. 一個 DLPack capsule

  4. 一個實現 Python buffer protocol(緩衝區協議)的物件

  5. 一個標量

  6. 一個標量序列

obj 是張量、NumPy 陣列或 DLPack capsule 時,返回的張量預設不要求梯度、具有與 obj 相同的資料型別、位於同一裝置上並與其共享記憶體。這些屬性可以透過 dtypedevicecopyrequires_grad 關鍵字引數控制。如果返回的張量資料型別不同、位於不同裝置上或請求了複製,則它將不與 obj 共享記憶體。如果 requires_gradTrue,則返回的張量將要求梯度,並且如果 obj 也是一個具有 autograd 歷史的張量,則返回的張量將具有相同的歷史。

obj 不是張量、NumPy 陣列或 DLPack capsule,但實現了 Python buffer protocol(緩衝區協議)時,緩衝區被解釋為一個位元組陣列,這些位元組根據傳遞給 dtype 關鍵字引數的資料型別大小進行分組。(如果沒有傳遞資料型別,則使用預設的浮點資料型別。)返回的張量將具有指定的資料型別(如果未指定則使用預設浮點資料型別),並且預設位於 CPU 裝置上並與緩衝區共享記憶體。

obj 是 NumPy 標量時,返回的張量將是 CPU 上的 0 維張量,且不共享記憶體(即 copy=True)。預設情況下,資料型別將是與 NumPy 標量資料型別對應的 PyTorch 資料型別。

obj 既不是上述型別,而是一個標量或標量序列時,返回的張量將預設從標量值推斷其資料型別,位於當前預設裝置上,且不共享記憶體。

另請參閱

torch.tensor() 建立的張量總是從輸入物件複製資料。torch.from_numpy() 建立的張量總是與 NumPy 陣列共享記憶體。torch.frombuffer() 建立的張量總是與實現 buffer protocol(緩衝區協議)的物件共享記憶體。torch.from_dlpack() 建立的張量總是與 DLPack capsules 共享記憶體。

引數

obj (object) – 張量、NumPy 陣列、DLPack Capsule、實現 Python buffer protocol(緩衝區協議)的物件、標量或標量序列。

關鍵字引數
  • dtype (torch.dtype, optional) – 返回張量的資料型別。預設值:None,此時返回張量的資料型別將從 obj 推斷。

  • copy (bool, optional) – 控制返回的張量是否與 obj 共享記憶體。預設值:None,此時返回的張量會盡可能與 obj 共享記憶體。如果為 True,則返回的張量不共享記憶體。如果為 False,則返回的張量與 obj 共享記憶體,如果無法共享則丟擲錯誤。

  • device (torch.device, optional) – 返回張量的裝置。預設值:None,此時將使用 obj 的裝置。或者,如果 obj 是 Python 序列,則將使用當前預設裝置。

  • requires_grad (bool, optional) – 返回張量是否需要梯度。預設值:False,此時返回的張量不需要梯度。如果為 True,則返回的張量將需要梯度,並且如果 obj 也是一個具有 autograd 歷史的張量,則返回的張量將具有相同的歷史。

示例

>>> a = torch.tensor([1, 2, 3])
>>> # Shares memory with tensor 'a'
>>> b = torch.asarray(a)
>>> a.data_ptr() == b.data_ptr()
True
>>> # Forces memory copy
>>> c = torch.asarray(a, copy=True)
>>> a.data_ptr() == c.data_ptr()
False

>>> a = torch.tensor([1., 2., 3.], requires_grad=True)
>>> b = a + 2
>>> b
tensor([3., 4., 5.], grad_fn=<AddBackward0>)
>>> # Shares memory with tensor 'b', with no grad
>>> c = torch.asarray(b)
>>> c
tensor([3., 4., 5.])
>>> # Shares memory with tensor 'b', retaining autograd history
>>> d = torch.asarray(b, requires_grad=True)
>>> d
tensor([3., 4., 5.], grad_fn=<AddBackward0>)

>>> array = numpy.array([1, 2, 3])
>>> # Shares memory with array 'array'
>>> t1 = torch.asarray(array)
>>> array.__array_interface__['data'][0] == t1.data_ptr()
True
>>> # Copies memory due to dtype mismatch
>>> t2 = torch.asarray(array, dtype=torch.float32)
>>> array.__array_interface__['data'][0] == t2.data_ptr()
False

>>> scalar = numpy.float64(0.5)
>>> torch.asarray(scalar)
tensor(0.5000, dtype=torch.float64)

文件

查閱 PyTorch 的全面開發者文件

檢視文件

教程

獲取面向初學者和高階開發者的深度教程

檢視教程

資源

查詢開發資源並獲得問題解答

檢視資源