NumPy Array Copy vs View

ความแตกต่างระหว่างสำเนาและตัวเลือก

ความแตกต่างหลักระหว่างสำเนาและตัวเลือกของตัวเดิมคือ สำเนาเป็นตัวเลือกใหม่ ในขณะที่ตัวเลือกมีลักษณะเดียวกับตัวเดิม

สำเนามีข้อมูล การเปลี่ยนแปลงในสำเนาจะไม่มีผลกระทบต่อตัวเดิม และการเปลี่ยนแปลงในตัวเดิมจะไม่มีผลกระทบต่อสำเนา

view ไม่มีข้อมูล การเปลี่ยนแปลงที่ทำต่อ view จะมีผลกระทบต่อตัวแปรแบบฉบับ และการเปลี่ยนแปลงที่ทำต่อตัวแปรแบบฉบับจะมีผลกระทบต่อ view

คัดลอก:

ตัวอย่าง

ทำการคัดลอก และเปลี่ยนแปลงตัวแปรแบบฉบับ แล้วแสดงทั้งสองตัวแปร:

import numpy as np
arr = np.array([1, 2, 3, 4, 5])
x = arr.copy()
arr[0] = 61
print(arr) 
print(x)

ปฏิบัติตัวอย่าง

คัดลอกนี้ควรไม่ได้รับผลกระทบจากการเปลี่ยนแปลงที่ทำต่อตัวแปรแบบฉบับ

view:

ตัวอย่าง

สร้าง view และเปลี่ยนแปลงตัวแปรแบบฉบับ แล้วแสดงทั้งสองตัวแปร:

import numpy as np
arr = np.array([1, 2, 3, 4, 5])
x = arr.view()
arr[0] = 61
print(arr) 
print(x)

ปฏิบัติตัวอย่าง

view ควรได้รับผลกระทบจากการเปลี่ยนแปลงที่ทำต่อตัวแปรแบบฉบับ

เปลี่ยนแปลงใน view:

ตัวอย่าง

สร้าง view และเปลี่ยนแปลง view แล้วแสดงทั้งสองตัวแปร:

import numpy as np
arr = np.array([1, 2, 3, 4, 5])
x = arr.view()
x[0] = 31
print(arr) 
print(x)

ปฏิบัติตัวอย่าง

ตัวแปรแบบฉบับควรได้รับผลกระทบจากการเปลี่ยนแปลงที่ทำต่อ view

ตรวจสอบว่าตัวแปรมีข้อมูลหรือไม่

เช่นเดียวกับที่กล่าวข้างต้น คัดลอกมีข้อมูล และ view ไม่มีข้อมูล แต่เราจะเช็คอย่างไร?

ตัวแปร NumPy มี attribute baseถ้าตัวแปรมีข้อมูล จะมีการกลับค่าของ attribute base None.

ถ้าไม่base attribute จะอ้างอิงตัวเดิม

ตัวอย่าง

พิมพ์ค่าของ属性 base ในการตรวจสอบว่าตัวแปร NumPy มีข้อมูลของตัวเองหรือไม่:

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.

ดูค่าเดิม