最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

解決numpy和torch數據類型轉化的問題

 更新時間:2021年05月22日 14:33:59   作者:雷恩Layne  
這篇文章主要介紹了解決numpy和torch數據類型轉化的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

在實際計算過程中,float類型使用最多,因此這里重點介紹numpy和torch數據float類型轉化遇到的問題,其他類型同理。

numpy數據類型轉化

numpy使用astype轉化數據類型,float默認轉化為64位,可以使用np.float32指定為32位

#numpy轉化float類型
a= np.array([1,2,3])
a = a.astype(np.float)
print(a)
print(a.dtype)

[1. 2. 3.]

float64

不要使用a.dtype指定數據類型,會使數據丟失

#numpy轉化float類型
b= np.array([1,2,3])
b.dtype= np.float32
print(b)
print(b.dtype)

[1.e-45 3.e-45 4.e-45]

float32

不要用float代替np.float,否則可能出現意想不到的錯誤

不能從np.float64位轉化np.float32,會報錯

np.float64與np.float32相乘,結果為np.float64

在實際使用過程中,可以指定為np.float,也可以指定具體的位數,如np.float,不過直接指定np.float更方便。

torch數據類型轉化

torch使用torch.float()轉化數據類型,float默認轉化為32位,torch中沒有torch.float64()這個方法

# torch轉化float類型
b = torch.tensor([4,5,6])
b = b.float()
b.dtype
torch.float32

np.float64使用torch.from_numpy轉化為torch后也是64位的

print(a.dtype)
c = torch.from_numpy(a)
c.dtype

float64

torch.float64

不要用float代替torch.float,否則可能出現意想不到的錯誤

torch.float32與torch.float64數據類型相乘會出錯,因此相乘的時候注意指定或轉化數據float具體類型

np和torch數據類型轉化大體原理一樣,只有相乘的時候,torch.float不一致不可相乘,np.float不一致可以相乘,并且轉化為np.float64

numpy和tensor互轉

tensor轉化為numpy

import torch
b = torch.tensor([4.0,6])
# b = b.float()
print(b.dtype)
c = b.numpy()
print(c.dtype)

torch.int64

int64

numpy轉化為tensor

import torch
import numpy as np
b= np.array([1,2,3])
# b = b.astype(np.float)
print(b.dtype)
c = torch.from_numpy(b)
print(c.dtype)

int32

torch.int32

可以看到,torch默認int型是64位的,numpy默認int型是32位的

補充:torch.from_numpy VS torch.Tensor

最近在造dataset的時候,突然發(fā)現,在輸入圖像轉tensor的時候,我可以用torch.Tensor直接強制轉型將numpy類轉成tensor類,也可以用torch.from_numpy這個方法將numpy類轉換成tensor類,那么,torch.Tensor和torch.from_numpy這兩個到底有什么區(qū)別呢?既然torch.Tensor能搞定,那torch.from_numpy留著不就是冗余嗎?

答案

有區(qū)別,使用torch.from_numpy更加安全,使用tensor.Tensor在非float類型下會與預期不符。

解釋

實際上,兩者的區(qū)別是大大的。打個不完全正確的比方說,torch.Tensor就如同c的int,torch.from_numpy就如同c++的static_cast,我們都知道,如果將int64強制轉int32,只要是高位轉低位,一定會出現高位被抹去的隱患的,不僅僅可能會丟失精度,甚至會正負對調。

這里的torch.Tensor與torch.from_numpy也會存在同樣的問題。

看看torch.Tensor的文檔,里面清楚地說明了,

torch.Tensor is an alias for the default tensor type (torch.FloatTensor).

而torch.from_numpy的文檔則是說明,

The returned tensor and ndarray share the same memory. Modifications to the tensor will be reflected in the ndarray and vice versa. The returned tensor is not resizable.

也即是說,

1、當轉換的源是float類型,torch.Tensor與torch.from_numpy會共享一塊內存!且轉換后的結果的類型是torch.float32

2、當轉換的源不是float類型,torch.Tensor得到的是torch.float32,而torch.from_numpy則是與源類型一致!

是不是很神奇,下面是一個簡單的例子:

import torch
import numpy as nps1 = np.arange(10, dtype=np.float32)
s2 = np.arange(10) # 默認的dtype是int64# 例一
o11 = torch.Tensor(s1)
o12 = torch.from_numpy(s1)
o11.dtype # torch.float32
o12.dtype # torch.float32
# 修改值
o11[0] = 12
o12[0] # tensor(12.)# 例二
o21 = torch.Tensor(s2)
o22 = torch.from_numpy(s2)
o21.dtype # torch.float32
o22.dtype # torch.int64
# 修改值
o21[0] = 12
o22[0] # tensor(0)

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • Python3.10和Python3.9版本之間的差異介紹

    Python3.10和Python3.9版本之間的差異介紹

    大家好,本篇文章主要講的是Python3.10和Python3.9版本之間的差異介紹,感興趣的同學趕快來看一看吧,對你有幫助的話記得收藏一下哦
    2021-12-12
  • python調用staf自動化框架的方法

    python調用staf自動化框架的方法

    今天小編就為大家分享一篇python調用staf自動化框架的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-12-12
  • pandas df.sample()的使用

    pandas df.sample()的使用

    本文主要介紹了pandas df.sample()的使用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-08-08
  • Python中處理無效數據的詳細教程

    Python中處理無效數據的詳細教程

    無效數據是指不符合數據收集目的或數據收集標準的數據,這些數據可能來自于不準確的測量、缺失值、錯誤標注、虛假的數據源或其他問題,本文就將帶大家學習Python中如何處理無效數據,感興趣的同學可以跟著小編一起來學習
    2023-06-06
  • tensorflow的計算圖總結

    tensorflow的計算圖總結

    這篇文章主要介紹了tensorflow的計算圖總結,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-01-01
  • Python使用PyPDF2和ReportLab操作PDF文件的詳細指南

    Python使用PyPDF2和ReportLab操作PDF文件的詳細指南

    在日常工作和項目中,PDF 文件處理是個常見需求,不論是合并報告、加密文檔、填充表單,還是生成發(fā)票,Python 中有許多用于操作 PDF 文件的庫,其中 PyPDF2 和 ReportLab 是兩個廣泛使用的工具,本文給大家介紹了Python使用PyPDF2和ReportLab操作PDF文件的詳細指南
    2025-01-01
  • Python?中的裝飾器實現函數的緩存(場景分析)

    Python?中的裝飾器實現函數的緩存(場景分析)

    Python中的裝飾器可以用于實現函數的緩存,其原理是在函數執(zhí)行前,首先判斷傳入的參數是否在緩存中已經存在對應的計算結果,這篇文章主要介紹了Python?中的裝飾器可以用于實現函數的緩存,需要的朋友可以參考下
    2023-02-02
  • PyTorch中torch.utils.data.DataLoader簡單介紹與使用方法

    PyTorch中torch.utils.data.DataLoader簡單介紹與使用方法

    DataLoader是PyTorch中讀取數據的一個重要接口,基本上用PyTorch訓練模型都會用到,下面這篇文章主要給大家介紹了關于PyTorch中torch.utils.data.DataLoader簡單介紹與使用方法的相關資料,需要的朋友可以參考下
    2022-06-06
  • 詳解Python NumPy中矩陣和通用函數的使用

    詳解Python NumPy中矩陣和通用函數的使用

    在NumPy中,矩陣是ndarray的子類,與數學概念中的矩陣一樣,NumPy中的矩陣也是二維的,可以使用 mat 、 matrix 以及 bmat 函數來創(chuàng)建矩陣。本文將詳細講解NumPy中矩陣和通用函數的使用,感興趣的可以了解一下
    2022-06-06
  • Pycharm如何對python文件進行打包

    Pycharm如何對python文件進行打包

    這篇文章主要介紹了Pycharm如何對python文件進行打包,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-02-02

最新評論

敦化市| 大荔县| 龙胜| 卓资县| 乐平市| 桂东县| 曲松县| 延安市| 清丰县| 盐池县| 曲沃县| 白玉县| 金山区| 石棉县| 牡丹江市| 和田县| 五莲县| 手机| 临高县| 红桥区| 新巴尔虎右旗| 天津市| 淮安市| 余江县| 灵丘县| 嘉兴市| 舞阳县| 平和县| 万年县| 潜江市| 章丘市| 南陵县| 遂宁市| 凌云县| 鹤山市| 偃师市| 高邮市| 朝阳区| 临泽县| 惠水县| 延川县|