NumPy Array Copy เทียบกับ View
ความแตกต่างระหว่างการคัดลอกและการดู
ความแตกต่างที่สำคัญระหว่างสำเนาและมุมมองของอาร์เรย์คือ การคัดลอกเป็นอาร์เรย์ใหม่และมุมมองเป็นเพียงมุมมองของอาร์เรย์ดั้งเดิม
สำเนาเป็นเจ้าของข้อมูลและการเปลี่ยนแปลงใดๆ ที่ทำกับสำเนาจะไม่ส่งผลต่ออาร์เรย์ดั้งเดิม และการเปลี่ยนแปลงใดๆ ที่ทำกับอาร์เรย์ดั้งเดิมจะไม่ส่งผลต่อการคัดลอก
มุมมองไม่ได้เป็นเจ้าของข้อมูล และการเปลี่ยนแปลงใดๆ ที่ทำกับมุมมองจะส่งผลต่ออาร์เรย์ดั้งเดิม และการเปลี่ยนแปลงใดๆ ที่ทำกับอาร์เรย์ดั้งเดิมจะส่งผลต่อมุมมอง
สำเนา:
ตัวอย่าง
ทำสำเนา เปลี่ยนอาร์เรย์เดิม และแสดงทั้งสองอาร์เรย์:
import numpy as np
arr = np.array([1, 2, 3, 4, 5])
x = arr.copy()
arr[0] = 42
print(arr)
print(x)
สำเนาไม่ควรได้รับผลกระทบจากการเปลี่ยนแปลงที่ทำกับอาร์เรย์เดิม
ดู:
ตัวอย่าง
สร้างมุมมอง เปลี่ยนอาร์เรย์เดิม และแสดงทั้งสองอาร์เรย์:
import numpy as np
arr = np.array([1, 2, 3, 4, 5])
x = arr.view()
arr[0] = 42
print(arr)
print(x)
มุมมองควรได้รับผลกระทบจากการเปลี่ยนแปลงที่ทำกับอาร์เรย์ดั้งเดิม
ทำการเปลี่ยนแปลงในมุมมอง:
ตัวอย่าง
สร้างมุมมอง เปลี่ยนมุมมอง และแสดงทั้งสองอาร์เรย์:
import numpy as np
arr = np.array([1, 2, 3, 4, 5])
x = arr.view()
x[0] = 31
print(arr)
print(x)
อาร์เรย์ดั้งเดิมควรได้รับผลกระทบจากการเปลี่ยนแปลงที่ทำกับมุมมอง
ตรวจสอบว่า Array เป็นเจ้าของข้อมูลหรือไม่
ดังที่กล่าวไว้ข้างต้น สำเนาเป็นเจ้าของข้อมูล และมุมมองไม่ได้เป็นเจ้าของ ข้อมูล แต่เราจะตรวจสอบได้อย่างไร
ทุกอาร์เรย์ NumPy มีแอตทริบิวต์base
ที่ส่งคืนNone
หากอาร์เรย์เป็นเจ้าของข้อมูล
มิฉะนั้นbase
คุณลักษณะจะอ้างอิงถึงวัตถุดั้งเดิม
ตัวอย่าง
พิมพ์ค่าของแอตทริบิวต์ฐานเพื่อตรวจสอบว่าอาร์เรย์เป็นเจ้าของข้อมูลหรือไม่:
import numpy as np
arr = np.array([1, 2, 3, 4, 5])
x = arr.copy()
y = arr.view()
print(x.base)
print(y.base)
สำเนาส่งNone
คืน
มุมมองส่งคืนอาร์เรย์ดั้งเดิม