中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

numpy和torch.tensor的張量操作方法是什么

發布時間:2023-02-25 10:51:05 來源:億速云 閱讀:140 作者:iii 欄目:開發技術

今天小編給大家分享一下numpy和torch.tensor的張量操作方法是什么的相關知識點,內容詳細,邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。

    1. 張量的拼接

    (1) numpy.concatenate

    np.concatenate((a1,a2,a3,…), axis=0)

    張量的拼接要用np.concatenate這個方法的,其中 a1,a2,a3,…是拼接的子張量,axis是維數,axis=0表示按照第一維進行拼接。

    例如將兩個二維的張量按照第一維拼接成一個二維的張量:

    import numpy as np
    a=np.array([[1,2,3]])
    b=np.array([[4,5,6]])
    c=np.concatenate((a,b),axis=0)
    print(c)
    d=np.concatenate((c,a),axis=0)
    print(d)
    e=np.concatenate((c,c),axis=1)
    print(e)

    結果

    array([[1, 2, 3],
           [4, 5, 6]])
    array([[1, 2, 3],
           [4, 5, 6],
           [1, 2, 3]])
    array([[1, 2, 3, 1, 2, 3],
           [4, 5, 6, 4, 5, 6]])

    對于axis選擇的更簡單直接的理解是我們可以從將被拼接的兩個矩陣的形狀上來看,比如

    a.shape=(3,1,2), b.shape=(6,1,2),則我們對其進行拼接的話目的是讓拼接之后的shape=(9,1,2),那么我們就選擇axis=0,即代表對第0維的進行相加。

    代碼如下:

    import numpy as np
    a = np.zeros((3, 1, 2))
    b = np.zeros((6, 1, 2))
    c = np.concatenate((a, b), axis=0)
    print(c.shape)

    結果為:

    (9, 1, 2)

    (2) torch.cat

    這里的拼接和上面介紹的numpy的拼接功能是一樣的

    C = torch.cat( (A,B),0 )  #按維數0拼接(豎著拼)
    C = torch.cat( (A,B),1 )  #按維數1拼接(橫著拼)

    例:

    import torch
    A=torch.ones(2,3)  #2x3的張量(矩陣)   
    B=2*torch.ones(4,3)  #4x3的張量(矩陣)    
    C=torch.cat((A,B),0)  #按維數0(行)拼接
    print(C)

    結果:

    tensor([[ 2.,  2.,  2.],
            [ 2.,  2.,  2.],
            [ 2.,  2.,  2.],
            [ 2.,  2.,  2.]])

    接著上面

    D=2*torch.ones(2,4) #2x4的張量(矩陣)
    C=torch.cat((A,D),1)#按維數1(列)拼接
    print(C)

    結果:

    tensor([[ 1.,  1.,  1.,  2.,  2.,  2.,  2.],
            [ 1.,  1.,  1.,  2.,  2.,  2.,  2.]])

    2. 張量的重構

    (1) np.reshape

    >>> import numpy as np
    >>> a = np.array([[1,2,3],[4,5,6]])
    >>> a
    array([[1, 2, 3],
           [4, 5, 6]])
    >>> b = np.reshape(a, (2,3,1))
    >>> b
    array([[[1],
            [2],
            [3]],
    
           [[4],
            [5],
            [6]]])
    >>> b.shape
    (2, 3, 1)

    (2) array.shape

    >>> import numpy as np
    >>> a = np.array([1,2,3,4,5,6,7,8])
    >>> a.shape = (2, 4)
    >>> a
    array([[1, 2, 3, 4],
           [5, 6, 7, 8]])

    (3) torch.view

    在pytorch中view函數的作用為重構張量的維度,相當于numpy中resize()的功能,但是用法可能不太一樣。

    1.torch.view(參數a,參數b,…)

    例如:

    import torch
    tt1=torch.tensor([-0.3623, -0.6115,  0.7283,  0.4699,  2.3261,  0.1599])
    result=tt1.view(3,2)
    print(result)

    結果

    tensor([[-0.3623, -0.6115],
            [ 0.7283,  0.4699],
            [ 2.3261,  0.1599]])

    在上面例子中參數a=3和參數b=2決定了將一維的tt1重構成3x2維的張量。

    2.有的時候會出現torch.view(-1)或者torch.view(參數a,-1)這種情況。

    例:

    import torch
    tt2=torch.tensor([[-0.3623, -0.6115],
             [ 0.7283,  0.4699],
             [ 2.3261,  0.1599]])
    result=tt2.view(-1)
    print(result)

    結果:

    tensor([-0.3623, -0.6115,  0.7283,  0.4699,  2.3261,  0.1599])

    由上面的案例可以看到,如果是torch.view(-1),則原張量會變成一維的結構。

    例:

    import torch
    tt3=torch.tensor([[-0.3623, -0.6115],
             [ 0.7283,  0.4699],
             [ 2.3261,  0.1599]])
    >>> result=tt3.view(2,-1)

    結果:

    tensor([[-0.3623, -0.6115,  0.7283],
            [ 0.4699,  2.3261,  0.1599]])

    由上面的案例可以看到,如果是torch.view(參數a,-1),則表示在參數b未知,參數a已知的情況下自動補齊列向量長度,在這個例子中a=2,tt3總共由6個元素,則b=6/2=3。

    例:

    import torch
    inputs = torch.randn(1,3)
    print(inputs)
    print(inputs.view(1, 1, -1))

    結果:

    tensor([[-0.5525,  0.6355, -0.3968]])
    tensor([[[-0.5525,  0.6355, -0.3968]]])

    將二維變為三維,a=1,b=1,c=3/(1*1)

    3. 張量的形狀

    (1) torch.size

    import torch
    inputs = torch.randn(1,3)
    print(inputs.size())

    結果:

    torch.Size([1, 3])

    4. 張量的擴展

    (1) torch.tensor擴展方法

    用unsqueeze方法將原張量進行維度擴張,unsqueeze后面括號里的數字代表在哪個維度擴張

    import torch
    
    a = torch.tensor([[1, 2, 3], [4, 5, 6]])
    b = torch.tensor([[7, 8, 9], [4, 5, 6]])
    print(a)
    print(b)
    a = a.unsqueeze(0)
    b = b.unsqueeze(0)
    print(a)
    print(b)
    c = torch.cat((a, b), 0)
    print(c)
    print(c.shape)

    結果為

    tensor([[1, 2, 3],
            [4, 5, 6]])
    tensor([[7, 8, 9],
            [4, 5, 6]])
    tensor([[[1, 2, 3],
             [4, 5, 6]]])
    tensor([[[7, 8, 9],
             [4, 5, 6]]])
    tensor([[[1, 2, 3],
             [4, 5, 6]],

            [[7, 8, 9],
             [4, 5, 6]]])
    torch.Size([2, 2, 3])

    用squeeze方法將原張量進行維度縮減,squeeze后面括號里的數字代表在哪個維度縮減

    import torch
    
    a = torch.tensor([[1, 2, 3], [4, 5, 6]])
    b = torch.tensor([[7, 8, 9], [4, 5, 6]])
    print(a)
    print(b)
    a = a.unsqueeze(0)
    b = b.unsqueeze(0)
    print(a)
    print(b)
    a = a.squeeze(0)
    b = b.squeeze(0)
    print(a)
    print(b)

    結果為

    tensor([[1, 2, 3],
            [4, 5, 6]])
    tensor([[7, 8, 9],
            [4, 5, 6]])
    tensor([[[1, 2, 3],
             [4, 5, 6]]])
    tensor([[[7, 8, 9],
             [4, 5, 6]]])
    tensor([[1, 2, 3],
            [4, 5, 6]])
    tensor([[7, 8, 9],
            [4, 5, 6]])

    (2) np.array擴展方法

    np.expand_dims:用于擴展數組的形狀

    原始數組:

    import numpy as np
     
    In [12]:
    a = np.array([[[1,2,3],[4,5,6]]])
    a.shape
    Out[12]:
    (1, 2, 3)

    np.expand_dims(a, axis=0)表示在0位置添加數據,轉換結果如下:

    In [13]:
    b = np.expand_dims(a, axis=0)
    b
    Out[13]:
    array([[[[1, 2, 3],
             [4, 5, 6]]]])
     
    In [14]:
    b.shape
    Out[14]:
    (1, 1, 2, 3)

    以上就是“numpy和torch.tensor的張量操作方法是什么”這篇文章的所有內容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學習更多的知識,請關注億速云行業資訊頻道。

    向AI問一下細節

    免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

    AI

    札达县| 武陟县| 南昌县| 海兴县| 怀远县| 滦平县| 崇州市| 景德镇市| 肇东市| 浪卡子县| 乐清市| 那坡县| 大城县| 双牌县| 卓尼县| 永和县| 崇明县| 昭通市| 库尔勒市| 汶上县| 桑植县| 清镇市| 肃宁县| 伊金霍洛旗| 温宿县| 阿克陶县| 军事| 丹巴县| 长沙市| 嘉鱼县| 乐清市| 华亭县| 西安市| 株洲市| 昭苏县| 江口县| 金寨县| 宣威市| 滦平县| 连州市| 夏河县|