Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

การคำนวณผลคูณเทนเซอร์สำหรับอาร์เรย์มิติต่างกัน ด้วยการหดตัวคู่ (double contraction) ใน Python


ภาพรวม

ใช้ numpy.tensordot() พร้อมพารามิเตอร์ axes=2 เพื่อทำ double contraction ระหว่างอาร์เรย์ที่มีมิติต่างกัน

พารามิเตอร์ axes

  • หากเป็น integer N: รวม N แกนสุดท้ายของ a และ N แกนแรกของ b
  • axes=2 หมายถึง tensor double contraction
  • ขนาดของแกนที่สอดคล้องกันต้องตรงกัน

ขั้นตอนการทำงาน

  1. นำเข้าไลบรารี
    import numpy as np
    
  2. สร้างอาร์เรย์มิติต่างกัน
    arr1 = np.array(range(1, 9))
    arr1.shape = (2, 2, 2)
    arr2 = np.array(('p', 'q', 'r', 's'), dtype=object)
    arr2.shape = (2, 2)
    
  3. ตรวจสอบคุณสมบัติ
    print("อาร์เรย์ 1...\n", arr1)
    print("\nอาร์เรย์ 2...\n", arr2)
    print("\nมิติอาร์เรย์ 1...\n", arr1.ndim)
    print("\nมิติอาร์เรย์ 2...\n", arr2.ndim)
    print("\nรูปร่างอาร์เรย์ 1...\n", arr1.shape)
    print("\nรูปร่างอาร์เรย์ 2...\n", arr2.shape)
    
  4. คำนวณ tensor dot product ด้วย axes=2
    print("\nTensor dot product...\n", np.tensordot(arr1, arr2, axes=2))
    

ตัวอย่างโค้ดสมบูรณ์

import numpy as np

arr1 = np.array(range(1, 9))
arr1.shape = (2, 2, 2)
arr2 = np.array(('p', 'q', 'r', 's'), dtype=object)
arr2.shape = (2, 2)

print("อาร์เรย์ 1...\n", arr1)
print("\nอาร์เรย์ 2...\n", arr2)
print("\nมิติของอาร์เรย์ 1...\n", arr1.ndim)
print("\nมิติของอาร์เรย์ 2...\n", arr2.ndim)
print("\nรูปร่างของอาร์เรย์ 1...\n", arr1.shape)
print("\nรูปร่างของอาร์เรย์ 2...\n", arr2.shape)

print("\nTensor dot product...\n", np.tensordot(arr1, arr2, axes=2))

ผลลัพธ์ที่คาดหวัง

อาร์เรย์ 1...
 [[[1 2] [3 4]] [[5 6] [7 8]]]
อาร์เรย์ 2...
 [['p' 'q'] ['r' 's']]
มิติของอาร์เรย์ 1...
 3
มิติของอาร์เรย์ 2...
 2
รูปร่างของอาร์เรย์ 1...
 (2, 2, 2)
รูปร่างของอาร์เรย์ 2...
 (2, 2)
Tensor dot product...
 ['pqqrrrssss' 'pppppqqqqqqrrrrrrrssssssss']