ความแตกต่างระหว่างndarray
และarray
ใน Numpy คืออะไร และฉันจะหาการนำไปใช้งานในซอร์สโค้ดของ numpy ได้ที่ไหน?
ความแตกต่างระหว่างndarray
และarray
ใน Numpy คืออะไร และฉันจะหาการนำไปใช้งานในซอร์สโค้ดของ numpy ได้ที่ไหน?
คำตอบ:
numpy.array
เป็นเพียงฟังก์ชั่นอำนวยความสะดวกในการสร้างndarray
; มันไม่ได้เป็นคลาสเอง
คุณยังสามารถสร้างอาร์เรย์โดยใช้numpy.ndarray
แต่ไม่ใช่วิธีที่แนะนำ จาก docstring ของnumpy.ndarray
:
อาร์เรย์ควรได้รับการสร้างขึ้นโดยใช้
array
,zeros
หรือempty
... พารามิเตอร์ให้ที่นี่หมายถึงวิธีการในระดับต่ำ (ndarray(...)
) สำหรับอินสแตนซ์อาร์เรย์
เนื้อสัตว์ส่วนใหญ่ของการนำไปใช้งานนั้นอยู่ในรหัส C ที่นี่ในมัลติเรย์ แต่คุณสามารถเริ่มดูอินเทอร์เฟซของ ndarray ได้ที่นี่:
https://github.com/numpy/numpy/blob/master/numpy/core/numeric.py
np.array
ว่าไม่ได้เป็นคลาสอย่างที่ฉันมักจะทำ x = np.array([1,2.1,3])
if isinstance(x,np.array): # will give you a TypeError
array_getarray
เริ่มต้นที่อย่างน้อยในการใช้งานปัจจุบัน numpy.ndarray.__array__
numpy.array
_array_fromobject
numpy.array
numpy.ndarray
เป็นฟังก์ชั่นที่ส่งกลับเป็น ไม่มีประเภทวัตถุ numpy.array
โค้ดตัวอย่างเพียงไม่กี่บรรทัดเพื่อแสดงความแตกต่างระหว่าง numpy.array และ numpy.ndarray
ขั้นตอนการอุ่นเครื่อง: สร้างรายการ
a = [1,2,3]
ตรวจสอบประเภท
print(type(a))
คุณจะได้รับ
<class 'list'>
สร้างอาร์เรย์ (จากรายการ) โดยใช้ np.array
a = np.array(a)
หรือคุณสามารถข้ามขั้นตอนการอุ่นเครื่องได้โดยตรง
a = np.array([1,2,3])
ตรวจสอบประเภท
print(type(a))
คุณจะได้รับ
<class 'numpy.ndarray'>
ซึ่งบอกประเภทของอาร์เรย์ numpy คือ numpy.ndarray
คุณสามารถตรวจสอบประเภทโดย
isinstance(a, (np.ndarray))
และคุณจะได้รับ
True
หนึ่งในสองบรรทัดต่อไปนี้จะให้ข้อความแสดงข้อผิดพลาดแก่คุณ
np.ndarray(a) # should be np.array(a)
isinstance(a, (np.array)) # should be isinstance(a, (np.ndarray))
numpy.ndarray()
เป็นชั้นในขณะที่numpy.array()
เป็นวิธีการ / ndarray
ฟังก์ชั่นในการสร้าง
ในเอกสารจำนวนมากหากคุณต้องการสร้างอาร์เรย์จากndarray
คลาสคุณสามารถทำได้ด้วย 2 วิธีตามที่ยกมา:
1- ใช้array()
, zeros()
หรือempty()
วิธีการ:
อาร์เรย์ควรได้รับการสร้างขึ้นโดยใช้อาร์เรย์ศูนย์หรือเปล่า (โปรดดูที่ส่วนดูเพิ่มเติมด้านล่าง) พารามิเตอร์ที่ให้ไว้ที่นี่อ้างถึงวิธีการระดับต่ำ ( ndarray(…)
) สำหรับการสร้างอาร์เรย์
2- จากndarray
คลาสโดยตรง:
มีสองโหมดในการสร้างอาร์เรย์โดยใช้__new__
: ถ้าบัฟเฟอร์เป็น None ดังนั้นจะใช้เฉพาะรูปร่าง dtype และคำสั่ง หาก buffer เป็นวัตถุที่เปิดเผยอินเตอร์เฟสของบัฟเฟอร์คำหลักทั้งหมดจะถูกตีความ
ตัวอย่างด้านล่างให้อาร์เรย์แบบสุ่มเพราะเราไม่ได้กำหนดค่าบัฟเฟอร์:
np.ndarray(shape=(2,2), dtype=float, order='F', buffer=None) array([[ -1.13698227e+002, 4.25087011e-303], [ 2.88528414e-306, 3.27025015e-309]]) #random
อีกตัวอย่างหนึ่งคือการกำหนดวัตถุอาร์เรย์ให้กับตัวอย่างบัฟเฟอร์:
>>> np.ndarray((2,), buffer=np.array([1,2,3]), ... offset=np.int_().itemsize, ... dtype=int) # offset = 1*itemsize, i.e. skip first element array([2, 3])
จากตัวอย่างด้านบนเราสังเกตว่าเราไม่สามารถกำหนดรายการให้กับ "buffer" และเราต้องใช้ numpy.array () เพื่อส่งคืนวัตถุ ndarray สำหรับบัฟเฟอร์
สรุป: ใช้numpy.array()
ถ้าคุณต้องการสร้างnumpy.ndarray()
วัตถุ "
ฉันคิดว่าnp.array()
คุณสามารถสร้าง C เช่นเดียวกับที่คุณพูดถึงการสั่งซื้อเมื่อคุณตรวจสอบการใช้np.isfortran()
มันบอกว่าเป็นเท็จ แต่np.ndarrray()
เมื่อคุณระบุคำสั่งซื้อมันจะสร้างขึ้นตามลำดับที่ให้