Tensor和NumPy相互转换「建议收藏」

Tensor和NumPy相互转换我们很容易用numpy()和from_numpy()将Tensor和NumPy中的数组相互转换。但是需要注意的一点是:这两个函数所产生的Tensor和NumPy中的数组共享相同的内存(所以他们之间的转换很快),改变其中一个时另一个也会改变!1.Tensor转NumPya=torch.ones(6)b=a.numpy()print(a,b)a+=1print(a,b)b+=1print(a,b)tensor([1.,1.

大家好,又见面了,我是你们的朋友全栈君。

Tensor和NumPy相互转换

我们很容易用numpy()和from_numpy()将Tensor和NumPy中的数组相互转换。但是需要注意的一点是: 这两个函数所产生的Tensor和NumPy中的数组共享相同的内存(所以他们之间的转换很快),改变其中一个时另一个也会改变!

1. Tensor转NumPy

a = torch.ones(6)
b = a.numpy()
print(a, b)

a += 1
print(a, b)
b += 1
print(a, b)
tensor([1., 1., 1., 1., 1., 1.]) [1. 1. 1. 1. 1. 1.]
tensor([2., 2., 2., 2., 2., 2.]) [2. 2. 2. 2. 2. 2.]
tensor([3., 3., 3., 3., 3., 3.]) [3. 3. 3. 3. 3. 3.]

2. NumPy数组转Tensor

import numpy as np
a = np.ones(7)
b = torch.from_numpy(a)
print(a, b)

a += 1
print(a, b)
b += 1
print(a, b)
[1. 1. 1. 1. 1. 1. 1.] tensor([1., 1., 1., 1., 1., 1., 1.], dtype=torch.float64)
[2. 2. 2. 2. 2. 2. 2.] tensor([2., 2., 2., 2., 2., 2., 2.], dtype=torch.float64)
[3. 3. 3. 3. 3. 3. 3.] tensor([3., 3., 3., 3., 3., 3., 3.], dtype=torch.float64)

3. torch.tensor()将NumPy数组转换成Tensor

直接用torch.tensor()将NumPy数组转换成Tensor,该方法总是会进行数据拷贝,返回的Tensor和原来的数据不再共享内存。

import numpy as np
a = np.ones((2,3))
c = torch.tensor(a)
a += 1
print('a:',a)
print('c:',c)
print(id(a)==id(c))
a: [[2. 2. 2.]
 [2. 2. 2.]]
c: tensor([[1., 1., 1.],
        [1., 1., 1.]], dtype=torch.float64)
False
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/125276.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 世界各个地区WIFI 2.4G及5G信道一览表

    世界各个地区WIFI 2.4G及5G信道一览表世界各个地区WIFI2.4G及5G信道一览表

    2022年5月20日
  • bytebuffer.putint_get的用法和例句

    bytebuffer.putint_get的用法和例句最近再看java的NIO,里面提到了几个基本的类,其中ByteBuffer是最基础的,用于Channel的读写传输数据使用。下面总结一下我理解的ByteBuffer。先从代码开始分析staticpublicvoidasIntBuffer(){ByteBufferbBuf=ByteBuffer.allocate(512);bBuf.putI

    2022年10月2日
  • PVPlayer的实现方式

    PVPlayer的实现方式关于opencore下多媒体播放,在mediaserver进程里面仅仅有一行代码:MediaPlayerService::instantiate();这行代码的作用是初始化一个MediaPlayerS

    2022年7月2日
  • 儿童计算机编程课是学什么(大学计算机课程)

    当今世界已经处于数字、网络和信息的计算机时代,而计算机编程是时代发展的关键因素,学习计算机学科的编程能培养一个人的创造力,使学习者具有批判性思维技能,同时使其成为主动学习者,为此,在少儿阶段接触和学习计算机编程知识,能使我们在今后的学习和生活中,更好的理解我们所处的时代,有能力改造我们的时代,并因此而终生受益。我们专门针对少儿学习者,开设了六门计算机科学基础课程,以方便少儿计算机编程学习者能灵活、…

    2022年4月17日
  • Android开源项目及库汇总

    Android开源项目及库汇总

    2021年10月1日
  • thread count_ThreadPool

    thread count_ThreadPoolThreadPool类提供一个线程池,该线程池可用于发送工作项、处理异步I/O、代表其他线程等待以及处理计时器。许多应用程序创建的线程都要在休眠状态中消耗大量时间,以等待事件发生。其他线程可能进入休眠状态,只被定期唤醒以轮询更改或更新状态信息。线程池通过为应用程序提供一个由系统管理的辅助线程池使您可以更为有效地使用线程。一个线程监视排到线程池的若干个等待操作的状态。当一个等待操作

    2022年9月24日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号