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

Python – แปลงเมทริกซ์ 3 มิติเป็นรายการพิกัด (Coordinate List)

บทความนี้สาธิตวิธีแปลงเมทริกซ์ 3 มิติ (List of List of List) เป็นรายการพิกัด (Coordinate List) โดยใช้ zip() และ List Comprehension

โค้ดตัวอย่าง

# 3D Matrix: 3 ชั้น x 2 แถว x 2 คอลัมน์
my_list_1 = [
    [['He', 'Wi'], ['llo', 'll']],
    [['Pyt', 'i'], ['hon', 'sFun']],
    [['Ho', 'g'], ['pe', 'ood']]
]

print("3D Matrix ต้นฉบับ:")
for i, layer in enumerate(my_list_1):
    print(f"  Layer {i}: {layer}")

# เรียงลำดับ (ตัวเลือก)
my_list_1.sort()
print("\nหลังเรียง:")
for i, layer in enumerate(my_list_1):
    print(f"  Layer {i}: {layer}")

# แปลงเป็น Coordinate List
# zip(sub_elem_1, sub_elem_2) จับคู่คอลัมน์ในแต่ละแถว
my_result = [
    ele 
    for sub_elem_1, sub_elem_2 in my_list_1 
    for ele in zip(sub_elem_1, sub_elem_2)
]

print("\nผลลัพธ์ (Coordinate List):")
print(my_result)

ผลลัพธ์

3D Matrix ต้นฉบับ:
  Layer 0: [['He', 'Wi'], ['llo', 'll']]
  Layer 1: [['Pyt', 'i'], ['hon', 'sFun']]
  Layer 2: [['Ho', 'g'], ['pe', 'ood']]

หลังเรียง:
  Layer 0: [['He', 'Wi'], ['llo', 'll']]
  Layer 1: [['Ho', 'g'], ['pe', 'ood']]
  Layer 2: [['Pyt', 'i'], ['hon', 'sFun']]

ผลลัพธ์ (Coordinate List):
[('He', 'llo'), ('Wi', 'll'), ('Ho', 'pe'), ('g', 'ood'), ('Pyt', 'hon'), ('i', 'sFun')]

อธิบาย Logic

# สำหรับแต่ละ Layer (sub_elem_1, sub_elem_2 คือ 2 แถวใน Layer นั้น)
for sub_elem_1, sub_elem_2 in my_list_1:
    # zip จับคู่คอลัมน์: (col0_row0, col0_row1), (col1_row0, col1_row1)
    for ele in zip(sub_elem_1, sub_elem_2):
        # ele คือ Tuple ของค่าที่อยู่ตำแหน่งเดียวกันใน 2 แถว
        yield ele

การประยุกต์ใช้

  • Image Processing: Pixel coordinates (x, y, channel)
  • 3D Geometry: Vertex coordinates
  • Tensor Operations: Reshape 3D → 2D Coordinates
  • Game Development: Voxel to Coordinate mapping

การขยาย: เก็บพิกัด (z, y, x) ด้วย

coords = []
for z, layer in enumerate(my_list_1):
    for y, (row1, row2) in enumerate(zip(layer[0], layer[1])):
        for x, (val1, val2) in enumerate(zip(row1, row2)):
            coords.append((z, y, x, val1, val2))
# ผลลัพธ์: (layer, row, col, val_from_row1, val_from_row2)