张量类型转换

一.前言

本章节我们来讲解张量的类型转换,掌握张量的转换方法,张量的类型转换也是经常使⽤的⼀种操作,是必须掌握的知识点。在本⼩节,我们主要学习如何将 numpy 数组和 PyTorch Tensor 的转化⽅法.

二.张量转换为 numpy 数组

使⽤ Tensor.numpy 函数可以将张量转换为 ndarray 数组,但是共享内存,可以使⽤ copy 函数避免共享。

import torch

# 1. 将张量转换为 numpy 数组
def test01():
    data_tensor = torch.tensor([2, 3, 4])
    # 使⽤张量对象中的 numpy 函数进⾏转换
    data_numpy = data_tensor.numpy()
    print(type(data_tensor))
    print(type(data_numpy))
    # 注意: data_tensor 和 data_numpy 共享内存
    # 修改其中的⼀个,另外⼀个也会发⽣改变
    # data_tensor[0] = 100
    data_numpy[0] = 100
    print(data_tensor)
    print(data_numpy)

if __name__ == '__main__':
    test01()

结果展示:

<class 'torch.Tensor'>
<class 'numpy.ndarray'>
tensor([100,   3,   4])
[100   3   4] 

三.numpy 转换为张量 

1. 使⽤ from_numpy 可以将 ndarray 数组转换为 Tensor,默认共享内存,使⽤ copy 函数避免共享。

2. 使⽤ torch.tensor 可以将 ndarray 数组转换为 Tensor,默认不共享内存。 

import torch
import numpy as np


# 1. 使⽤ from_numpy 函数
def test01():
    data_numpy = np.array([2, 3, 4])
    # 将 numpy 数组转换为张量类型
    # 1. from_numpy
    # 2. torch.tensor(ndarray)
    # 浅拷⻉
    data_tensor = torch.from_numpy(data_numpy)
    # nunpy 和 tensor 共享内存
    # data_numpy[0] = 100
    data_tensor[0] = 100
    print(data_tensor)
    print(data_numpy)

# 2. 使⽤ torch.tensor 函数
def test02():
    data_numpy = np.array([2, 3, 4])
    data_tensor = torch.tensor(data_numpy)
    # nunpy 和 tensor 不共享内存
    # data_numpy[0] = 100
    data_tensor[0] = 100
    print(data_tensor)
    print(data_numpy)

if __name__ == '__main__':
    test01()
    test02()

 结果展示:

tensor([100,   3,   4])
[100   3   4]
tensor([100,   3,   4])
[2 3 4]

四.标量张量和数字的转换 

对于只有⼀个元素的张量,使⽤ item ⽅法将该值从张量中提取出来。

import torch

# 3. 标量张量和数字的转换
def test03():
    # 当张量只包含⼀个元素时, 可以通过 item 函数提取出该值
    data = torch.tensor([30, ])
    print(data.item())
    data = torch.tensor(30)
    print(data.item())

if __name__ == '__main__':
    test03()

结果展示:

30
30 

五.总结

在本⼩节中, 我们主要学习了 numpy 和 tensor 互相转换的规则, 以及标量张量与数值之间的转换规则。 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值