網上的很多部落格說tensor與numpy陣列共享記憶體,這是錯誤的
先給結論:tensor與numpy陣列共享部分記憶體,說共享值更嚴謹,且有條件
看**:
a = torch.ones(2,2)
b = a.numpy()
print(id(a))
print(id(b))
輸出:3030786996336
3030755215040
解析:在cpython裡面,a,b是c指標,torch.ones(2,2)構造生成乙個tensor例項,放入一片記憶體區域,指標a指向這片記憶體區域,構造生成的tensor物件內部又有多個指標,指向不同的記憶體區域,其中有乙個指向陣列的指標tv_ptr,a.numpy()構造生成乙個numpy物件,且這個numpy物件內部也有多個指標,其中也有乙個指向陣列的指標nv_ptr,僅這兩個指標指向同一記憶體區域,並非所有指標都共享記憶體,b指標指向構造生成的numpy物件
共享值的條件:
tensor物件的操作必須是在原記憶體區域上的操作,numpy物件的操作也是在原物件記憶體區域上的操作,2者如何在原記憶體區域上操作而不是指向新的記憶體區域,看我上兩篇部落格
pytorch中tensor的型別轉換
1 資料型別轉換 在tensor後加 long int float double 等即可,也可以用.to 函式進行轉換,所有的tensor型別可參考 2 資料儲存位置轉換 cpu張量 gpu張量,使用data.cuda gpu張量 cpu張量,使用data.cpu 3 與numpy資料型別轉換 te...
pytorch中的Tensor使用入門
1.3 級聯操作cat 1.4 常用tensor 1.5 tensor在cnn中的形式 1.6 element wise 直接建立 t torch.rand 3,4 把numpy轉為tensor t np.random.rand 3,4 torch.tensor是呼叫乙個類,會預設把data轉為fl...
pytorch常見的Tensor型別詳解
tensor有不同的資料型別,每種程式設計客棧型別分別有對應cpu和gpu版本 halftensor除外 預設的tensor是floattensor,可通過torch.set default tensor type修改預設tensor型別 如果預設型別為gpu tensor,則所有操作都將在gpu上...