เราใช้ Indexing และ Slicing เพื่อเข้าถึงค่าของทิลเซอร์ Indexing ใช้เข้าถึงองค์ประกอบเดี่ยว ในขณะที่ Slicing ใช้เข้าถึงลำดับขององค์ประกอบ การแก้ไขค่าใช้ตัวดำเนินการกำหนดค่า (assignment operator)
ขั้นตอนการทำงาน
นำเข้าไลบรารี torch
กำหนดทิลเซอร์ PyTorch
เข้าถึงค่าเดี่ยวด้วย indexing หรือลำดับค่าด้วย slicing
แก้ไขค่าที่เข้าถึงด้วยตัวดำเนินการกำหนดค่า
พิมพ์ทิลเซอร์เพื่อตรวจสอบการเปลี่ยนแปลง
ตัวอย่างที่ 1: เข้าถึงและแก้ไขค่าเดี่ยว (Indexing)
import torch
# กำหนดทิลเซอร์
a = torch.Tensor([[3, 5], [1, 2], [5, 7]])
print("a:\n", a)
# เข้าถึงค่าที่ index [1,0] -> แถวที่ 2 คอลัมน์ที่ 1
b = a[1, 0]
print("a[1,0]:\n", b)
# วิธี indexing อื่น
c = a[1][0]
print("a[1][0]:\n", c)
# แก้ไขค่า 1 ให้เป็น 9
a[1, 0] = 9
print("tensor 'a' after modifying value at a[1,0]:")
print("a:\n", a)
ผลลัพธ์
a: tensor([[3., 5.], [1., 2.], [5., 7.]]) a[1,0]: tensor(1.) a[1][0]: tensor(1.) tensor 'a' after modifying value at a[1,0]: a: tensor([[3., 5.], [9., 2.], [5., 7.]])
ตัวอย่างที่ 2: เข้าถึงและแก้ไขหลายค่า (Slicing)
import torch
a = torch.Tensor([[3, 5], [1, 2], [5, 7]])
print("a:\n", a)
# เข้าถึงค่าทั้งหมดของแถวที่ 2
b = a[1]
print("a[1]:\n", a[1])
# เข้าถึงแถวที่ 1 และ 2
b = a[0:2]
print("a[0:2]:\n", a[0:2])
# เข้าถึงคอลัมน์ที่ 2 ทั้งหมด
c = a[:, 1]
print("a[:,1]:\n", a[:, 1])
# เข้าถึงแถวแรก 2 แถว แต่คอลัมน์ที่ 2
print("a[0:2, 1]:\n", a[0:2, 1])
# แก้ไขค่าของแถวที่ 2
a[1] = torch.Tensor([9, 9])
print("After modifying a[1]:\n", a)
# แก้ไขค่าของแถวแรก 2 แถว คอลัมน์ที่ 2
a[0:2, 1] = torch.Tensor([4, 4])
print("After modifying a[0:2, 1]:\n", a)
ผลลัพธ์
a: tensor([[3., 5.], [1., 2.], [5., 7.]]) a[1]: tensor([1., 2.]) a[0:2]: tensor([[3., 5.], [1., 2.]]) a[:,1]: tensor([5., 2., 7.]) a[0:2, 1]: tensor([5., 2.]) After modifying a[1]: tensor([[3., 5.], [9., 9.], [5., 7.]]) After modifying a[0:2, 1]: tensor([[3., 4.], [9., 4.], [5., 7.]])