Pytorch中的tensor常用操作

原文地址
torch.cat(seq, dim=0, out=None) → Tensor

在指定的維度dim上對(duì)序列seq進(jìn)行連接操作。

參數(shù):

  • seq (sequence of Tensors) - Python序列或相同類型的張量序列
  • dim (int, optional) - 沿著此維度連接張量
  • out (Tensor, optional) - 輸出參數(shù)

例子:

x = torch.randn(2, 3)
x
-0.5866 -0.3784 -0.1705
-1.0125 0.7406 -1.2073
[torch.FloatTensor of size 2x3]
torch.cat((x, x, x), 0)
-0.5866 -0.3784 -0.1705
-1.0125 0.7406 -1.2073
-0.5866 -0.3784 -0.1705
-1.0125 0.7406 -1.2073
-0.5866 -0.3784 -0.1705
-1.0125 0.7406 -1.2073
[torch.FloatTensor of size 6x3]
torch.cat((x, x, x), 1)
-0.5866 -0.3784 -0.1705 -0.5866 -0.3784 -0.1705 -0.5866 -0.3784 -0.1705
-1.0125 0.7406 -1.2073 -1.0125 0.7406 -1.2073 -1.0125 0.7406 -1.2073
[torch.FloatTensor of size 2x9]

擴(kuò)大張量

torch.Tensor.expand(sizes)* → Tensor

返回張量的一個(gè)新視圖,可以將張量的單個(gè)維度擴(kuò)大為更大的尺寸。

張量也可以擴(kuò)大為更高維,新增加的維度將附在前面。 擴(kuò)大張量不需要分配新內(nèi)存,僅僅是新建一個(gè)張量的視圖。任意一個(gè)一維張量在不分配新內(nèi)存情況下都可以擴(kuò)展為任意的維度。

傳入-1則意味著維度擴(kuò)大不涉及這個(gè)維度。

參數(shù):

  • sizes (torch.Size or int...) – 想要擴(kuò)展的目標(biāo)維度

例子:

x = torch.Tensor([[1], [2], [3]])
x.size()
torch.Size([3, 1])
x.expand(3, 4)
1 1 1 1
2 2 2 2
3 3 3 3
[torch.FloatTensor of size 3x4]

壓縮張量

torch.squeeze(input, dim=None, out=None) → Tensor

除去輸入張量input中數(shù)值為1的維度,并返回新的張量。如果輸入張量的形狀為( [圖片上傳失敗...(image-786ec5-1580566115084)]

),那么輸出張量的形狀為( [圖片上傳失敗...(image-a0a179-1580566115084)]

)。

當(dāng)通過(guò)dim參數(shù)指定維度時(shí),維度壓縮操作只會(huì)在指定的維度上進(jìn)行。如果輸入向量的形狀為( [圖片上傳失敗...(image-1088a1-1580566115084)]

),squeeze(input, 0)會(huì)保持張量的維度不變,只有在執(zhí)行squeeze(input, 1)時(shí),輸入張量的形狀會(huì)被壓縮至( [圖片上傳失敗...(image-759892-1580566115084)]

)。

如果一個(gè)張量只有1個(gè)維度,那么它不會(huì)受到上述方法的影響。

輸出的張量與原張量共享內(nèi)存,如果改變其中的一個(gè),另一個(gè)也會(huì)改變。

參數(shù):

  • input (Tensor) – 輸入張量
  • dim (int, optional) – 如果給定,則只會(huì)在給定維度壓縮
  • out (Tensor, optional) – 輸出張量

例子:

x = torch.zeros(2, 1, 2, 1, 2)
x.size()
torch.Size([2, 1, 2, 1, 2])
y = torch.squeeze(x)
y.size()
torch.Size([2, 2, 2])
y = torch.squeeze(x, 0)
y.size()
torch.Size([2, 1, 2, 1, 2])
y = torch.squeeze(x, 1)
y.size()
torch.Size([2, 2, 1, 2])

重復(fù)張量

torch.Tensor.repeat(sizes)*

沿著指定的維度重復(fù)張量。不同于expand()方法,本函數(shù)復(fù)制的是張量中的數(shù)據(jù)。

參數(shù):

  • size (torch.size ot int...) - 沿著每一維重復(fù)的次數(shù)

例子:

x = torch.Tensor([1, 2, 3])
x.repeat(4, 2)
1 2 3 1 2 3
1 2 3 1 2 3
1 2 3 1 2 3
1 2 3 1 2 3
[torch.FloatTensor of size 4x6]

torch.Tensor.unfold(dim, size, step) → Tensor

返回一個(gè)新的張量,其中元素復(fù)制于有原張量在dim維度上的數(shù)據(jù),復(fù)制重復(fù)size次,復(fù)制時(shí)的步進(jìn)值為step。

參數(shù):

  • dim (int) - 目標(biāo)維度
  • size (int) - 復(fù)制重復(fù)的次數(shù)(展開維度)
  • step (int) - 步長(zhǎng)

例子:

x = torch.arange(1, 8)
x
1
2
3
4
5
6
7
[torch.FloatTensor of size 7]
x.unfold(0, 2, 1)
1 2
2 3
3 4
4 5
5 6
6 7
[torch.FloatTensor of size 6x2]
x.unfold(0, 2, 2)
1 2
3 4
5 6
[torch.FloatTensor of size 3x2]

縮小張量

torch.Tensor.narrow(dimension, start, length) → Tensor

返回一個(gè)經(jīng)過(guò)縮小后的張量。操作的維度由dimension指定??s小范圍是從start開始到start+length。執(zhí)行本方法的張量與返回的張量共享相同的底層內(nèi)存。

參數(shù):

  • dimension (int) – 要進(jìn)行縮小的維度
  • start (int) – 開始維度索引
  • length (int) – 縮小持續(xù)的長(zhǎng)度

例子:

x = torch.Tensor([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
x.narrow(0, 0, 2)
1 2 3
4 5 6
[torch.FloatTensor of size 2x3]
x.narrow(1, 1, 2)
2 3
5 6
8 9
[torch.FloatTensor of size 3x2]

張量變形

torch.Tensor.view(args)* → Tensor

返回一個(gè)有相同數(shù)據(jù)但是不同形狀的新的向量。

返回的裝兩必須與原張量有相同的數(shù)據(jù)和相同的元素個(gè)數(shù),但是可以有不同的尺寸。

參數(shù):

  • args (torch.Size or int....) - 理想的指定尺寸

例子:

x = torch.randn(4, 4)
x.size()
torch.Size([4, 4])
y = x.view(16)
y.size()
torch.Size([16])

重設(shè)張量尺寸

torch.Tensor.resize_(sizes)*

將張量的尺寸調(diào)整為指定的大小。如果元素個(gè)數(shù)比當(dāng)前的內(nèi)存大小大,就將底層存儲(chǔ)大小調(diào)整為與新元素?cái)?shù)目一致的大小。
如果元素個(gè)數(shù)比當(dāng)前內(nèi)存小,則底層存儲(chǔ)不會(huì)被改變。原來(lái)張量中被保存下來(lái)的元素將保持不變,但新內(nèi)存將不會(huì)被初始化。

參數(shù):

  • sizes (torch.Size or int....) - 需要調(diào)整的大小

例子:

x = torch.Tensor([[1, 2], [3, 4], [5, 6]])
x.resize_(2, 2)
x
1 2
3 4
[torch.FloatTensor of size 2x2]

置換張量維度

torch.Tensor.permute(dims)*

將執(zhí)行本方法的張量的維度換位。

參數(shù):

  • dim (int) - 指定換位順序

例子:

x = torch.randn(2, 3, 5)
x.size()
torch.Size([2, 3, 5])
x.permute(2, 0, 1).size()
torch.Size([5, 2, 3])

查看張量單個(gè)元素的字節(jié)數(shù)

torch.Tensor.element_size() → int

查看某類型張量單個(gè)元素的字節(jié)數(shù)。

例子:

torch.FloatTensor().element_size()
4

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • pytorch torch包 torch 包含了多維張量的數(shù)據(jù)結(jié)構(gòu)以及基于其上的多種數(shù)學(xué)操作。 函數(shù) torch....
    NJUST江波閱讀 1,157評(píng)論 0 0
  • Tensor的創(chuàng)建除了構(gòu)造器,還提供了工廠模式的創(chuàng)建方式:函數(shù),同時(shí)提供了基本運(yùn)算函數(shù)的封裝。本主題就專門數(shù)理這些...
    楊強(qiáng)AT南京閱讀 2,279評(píng)論 0 1
  • 曾有人說(shuō)梔子花是學(xué)生時(shí)代的別離,它是高中時(shí)代結(jié)束的芬芳,它的形象代表著我們的純潔、張揚(yáng)和淡淡的憂傷。寫高郵的咸...
    澄苿閱讀 280評(píng)論 0 0
  • 探究性學(xué)習(xí),是學(xué)生在學(xué)科領(lǐng)域內(nèi)或現(xiàn)實(shí)生活情境中選取某個(gè)問(wèn)題作為實(shí)破點(diǎn),通過(guò)質(zhì)疑、發(fā)現(xiàn)問(wèn)題;調(diào)查研究、分析研...
    玨_d191閱讀 195評(píng)論 0 1
  • 我是一個(gè)曾經(jīng)經(jīng)歷豐富的人。財(cái)富,名聲,所有光彩奪目的東西都曾是我追求的目標(biāo)。我不顧一切的奔向那些閃閃發(fā)亮的精彩人生...
    feifeilovelycn閱讀 702評(píng)論 2 1

友情鏈接更多精彩內(nèi)容