您好,登錄后才能下訂單哦!
這篇文章主要為大家展示了“Numpy與Pytorch互轉(zhuǎn)時(shí)需要注意什么問(wèn)題”,內(nèi)容簡(jiǎn)而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領(lǐng)大家一起研究并學(xué)習(xí)一下“Numpy與Pytorch互轉(zhuǎn)時(shí)需要注意什么問(wèn)題”這篇文章吧。
使用 torch.from_numpy() 轉(zhuǎn)換,需要注意,兩者共享內(nèi)存。例子如下:
import torch
import numpy as np
a = np.array([1,2,3])
b = torch.from_numpy(a)
np.add(a, 1, out=a)
print('轉(zhuǎn)換后a', a)
print('轉(zhuǎn)換后b', b)
# 顯示
轉(zhuǎn)換后a [2 3 4]
轉(zhuǎn)換后b tensor([2, 3, 4], dtype=torch.int32)
使用 .numpy() 轉(zhuǎn)換,同樣,兩者共享內(nèi)存。例子如下:
import torch
import numpy as np
a = torch.zeros((2, 3), dtype=torch.float)
c = a.numpy()
np.add(c, 1, out=c)
print('a:', a)
print('c:', c)
# 結(jié)果
a: tensor([[1., 1., 1.],
[1., 1., 1.]])
c: [[1. 1. 1.]
[1. 1. 1.]]
需要注意的是,如果將程序中的 np.add(c, 1, out=c) 改成 c = c + 1 會(huì)發(fā)現(xiàn)兩者貌似不共享內(nèi)存了,其實(shí)不然,原因是后者相當(dāng)于改變了 c 的存儲(chǔ)地址。可以使用 id(c) 發(fā)現(xiàn)c的內(nèi)存位置變了。
補(bǔ)充:pytorch中tensor數(shù)據(jù)和numpy數(shù)據(jù)轉(zhuǎn)換中注意的一個(gè)問(wèn)題
在pytorch中,把numpy.array數(shù)據(jù)轉(zhuǎn)換到張量tensor數(shù)據(jù)的常用函數(shù)是torch.from_numpy(array)或者torch.Tensor(array),第一種函數(shù)更常用。
import numpy as np
import torch
a=np.arange(6,dtype=int).reshape(2,3)
b=torch.from_numpy(a)
c=torch.Tensor(a)
a[0][0]=10
print(a,'
',b,'
',c)
[[10 1 2]
[ 3 4 5]]
tensor([[10, 1, 2],
[ 3, 4, 5]], dtype=torch.int32)
tensor([[0., 1., 2.],
[3., 4., 5.]])
c[0][0]=10
print(a,'
',b,'
',c)
[[10 1 2]
[ 3 4 5]]
tensor([[10, 1, 2],
[ 3, 4, 5]], dtype=torch.int32)
tensor([[10., 1., 2.],
[ 3., 4., 5.]])
print(b.type())
torch.IntTensor
print(c.type())
torch.FloatTensor
可以看出修改數(shù)組a的元素值,張量b的元素值也改變了,但是張量c卻不變。修改張量c的元素值,數(shù)組a和張量b的元素值都不變。
這說(shuō)明torch.from_numpy(array)是做數(shù)組的淺拷貝,torch.Tensor(array)是做數(shù)組的深拷貝。
以上是“Numpy與Pytorch互轉(zhuǎn)時(shí)需要注意什么問(wèn)題”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。