NumPy - คู่มือฉบับย่อ
NumPy เป็นแพ็คเกจ Python ย่อมาจาก 'Numerical Python' เป็นไลบรารีที่ประกอบด้วยวัตถุอาร์เรย์หลายมิติและชุดของรูทีนสำหรับการประมวลผลอาร์เรย์
Numericบรรพบุรุษของ NumPy ได้รับการพัฒนาโดย Jim Hugunin นอกจากนี้ยังมีการพัฒนาอีกแพ็คเกจ Numarray โดยมีฟังก์ชันเพิ่มเติมบางอย่าง ในปี 2548 Travis Oliphant ได้สร้างแพ็คเกจ NumPy โดยรวมคุณสมบัติของ Numarray ไว้ในแพ็คเกจตัวเลข มีผู้ร่วมสนับสนุนโครงการโอเพ่นซอร์สนี้มากมาย
การดำเนินการโดยใช้ NumPy
การใช้ NumPy นักพัฒนาสามารถดำเนินการดังต่อไปนี้ -
การดำเนินการทางคณิตศาสตร์และตรรกะบนอาร์เรย์
การแปลงฟูริเยร์และกิจวัตรสำหรับการจัดการรูปร่าง
การดำเนินการที่เกี่ยวข้องกับพีชคณิตเชิงเส้น NumPy มีฟังก์ชันในตัวสำหรับพีชคณิตเชิงเส้นและการสร้างตัวเลขสุ่ม
NumPy - ทดแทน MatLab
NumPy มักใช้ร่วมกับแพ็คเกจเช่น SciPy (Scientific Python) และ Mat−plotlib(การวางแผนไลบรารี) ชุดค่าผสมนี้ใช้กันอย่างแพร่หลายเพื่อทดแทน MatLab ซึ่งเป็นแพลตฟอร์มยอดนิยมสำหรับการคำนวณทางเทคนิค อย่างไรก็ตามทางเลือก Python สำหรับ MatLab ถูกมองว่าเป็นภาษาโปรแกรมที่ทันสมัยและสมบูรณ์มากขึ้น
เป็นโอเพ่นซอร์สซึ่งเป็นข้อได้เปรียบเพิ่มเติมของ NumPy
การแจกแจง Python มาตรฐานไม่ได้มาพร้อมกับโมดูล NumPy ทางเลือกที่มีน้ำหนักเบาคือการติดตั้ง NumPy โดยใช้โปรแกรมติดตั้งแพ็คเกจ Python ยอดนิยมpip.
pip install numpy
วิธีที่ดีที่สุดในการเปิดใช้ NumPy คือการใช้แพ็คเกจไบนารีที่สามารถติดตั้งได้เฉพาะสำหรับระบบปฏิบัติการของคุณ ไบนารีเหล่านี้มีสแต็ก SciPy เต็มรูปแบบ (รวมถึง NumPy, SciPy, matplotlib, IPython, SymPy และแพ็คเกจจมูกพร้อมกับ Core Python)
Windows
อนาคอนดา (จาก https://www.continuum.io) เป็นการแจกจ่าย Python ฟรีสำหรับ SciPy stack นอกจากนี้ยังสามารถใช้ได้กับ Linux และ Mac
หลังคา (https://www.enthought.com/products/canopy/) มีให้บริการฟรีเช่นเดียวกับการจัดจำหน่ายเชิงพาณิชย์ด้วย SciPy stack สำหรับ Windows, Linux และ Mac
Python (x, y): เป็นการแจกจ่าย Python ฟรีด้วย SciPy stack และ Spyder IDE สำหรับ Windows OS (ดาวน์โหลดได้จากhttps://www.python-xy.github.io/)
ลินุกซ์
ตัวจัดการแพ็กเกจของลินุกซ์ดิสทริบิวชันที่เกี่ยวข้องใช้เพื่อติดตั้งแพ็กเกจหนึ่งแพ็กเกจหรือมากกว่าในสแตก SciPy
สำหรับ Ubuntu
sudo apt-get install python-numpy
python-scipy python-matplotlibipythonipythonnotebook python-pandas
python-sympy python-nose
สำหรับ Fedora
sudo yum install numpyscipy python-matplotlibipython
python-pandas sympy python-nose atlas-devel
สร้างจากแหล่งที่มา
ต้องติดตั้ง Core Python (2.6.x, 2.7.x และ 3.2.x เป็นต้นไป) พร้อมกับ distutils และโมดูล zlib ควรเปิดใช้งาน
GNU gcc (4.2 ขึ้นไป) C คอมไพเลอร์ต้องพร้อมใช้งาน
ในการติดตั้ง NumPy ให้รันคำสั่งต่อไปนี้
Python setup.py install
ในการทดสอบว่าโมดูล NumPy ได้รับการติดตั้งอย่างถูกต้องหรือไม่ให้ลองนำเข้าจาก Python prompt
import numpy
หากไม่ได้ติดตั้งข้อความแสดงข้อผิดพลาดต่อไปนี้จะแสดงขึ้น
Traceback (most recent call last):
File "<pyshell#0>", line 1, in <module>
import numpy
ImportError: No module named 'numpy'
หรืออีกวิธีหนึ่งคือนำเข้าแพ็คเกจ NumPy โดยใช้ไวยากรณ์ต่อไปนี้ -
import numpy as np
วัตถุที่สำคัญที่สุดที่กำหนดใน NumPy คือประเภทอาร์เรย์ N มิติที่เรียกว่า ndarray. อธิบายถึงการรวบรวมรายการประเภทเดียวกัน รายการในคอลเลกชันสามารถเข้าถึงได้โดยใช้ดัชนีที่อิงศูนย์
ทุกรายการใน ndarray ใช้ขนาดของบล็อกในหน่วยความจำเท่ากัน แต่ละองค์ประกอบใน ndarray เป็นวัตถุของวัตถุประเภทข้อมูล (เรียกว่าdtype).
รายการใด ๆ ที่แยกจากอ็อบเจ็กต์ ndarray (โดยการแบ่งส่วน) จะแสดงโดยออบเจ็กต์ Python ของอาร์เรย์ประเภทสเกลาร์ชนิดหนึ่ง แผนภาพต่อไปนี้แสดงความสัมพันธ์ระหว่าง ndarray วัตถุชนิดข้อมูล (dtype) และประเภทสเกลาร์อาร์เรย์ -
อินสแตนซ์ของคลาส ndarray สามารถสร้างได้โดยรูทีนการสร้างอาร์เรย์ต่างๆที่อธิบายไว้ในบทช่วยสอน ndarray พื้นฐานถูกสร้างขึ้นโดยใช้ฟังก์ชันอาร์เรย์ใน NumPy ดังนี้ -
numpy.array
สร้าง ndarray จากออบเจ็กต์ใด ๆ ที่เปิดเผยส่วนต่อประสานอาร์เรย์หรือจากวิธีการใด ๆ ที่ส่งคืนอาร์เรย์
numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)
ตัวสร้างข้างต้นรับพารามิเตอร์ต่อไปนี้ -
ซีเนียร์ | พารามิเตอร์และคำอธิบาย |
---|---|
1 | object ออบเจ็กต์ใด ๆ ที่เปิดเผยวิธีการเชื่อมต่ออาร์เรย์จะส่งกลับอาร์เรย์หรือลำดับ (ซ้อนกัน) ใด ๆ |
2 | dtype ประเภทข้อมูลที่ต้องการของอาร์เรย์เป็นทางเลือก |
3 | copy ไม่จำเป็น. โดยค่าเริ่มต้น (จริง) วัตถุจะถูกคัดลอก |
4 | order C (หลักแถว) หรือ F (คอลัมน์หลัก) หรือ A (ใด ๆ ) (ค่าเริ่มต้น) |
5 | subok โดยค่าเริ่มต้นอาร์เรย์ที่ส่งคืนถูกบังคับให้เป็นอาร์เรย์คลาสพื้นฐาน ถ้าเป็นจริงคลาสย่อยจะผ่าน |
6 | ndmin ระบุขนาดขั้นต่ำของอาร์เรย์ผลลัพธ์ |
ลองดูตัวอย่างต่อไปนี้เพื่อทำความเข้าใจให้ดีขึ้น
ตัวอย่าง 1
import numpy as np
a = np.array([1,2,3])
print a
ผลลัพธ์มีดังนี้ -
[1, 2, 3]
ตัวอย่าง 2
# more than one dimensions
import numpy as np
a = np.array([[1, 2], [3, 4]])
print a
ผลลัพธ์มีดังนี้ -
[[1, 2]
[3, 4]]
ตัวอย่างที่ 3
# minimum dimensions
import numpy as np
a = np.array([1, 2, 3,4,5], ndmin = 2)
print a
ผลลัพธ์มีดังนี้ -
[[1, 2, 3, 4, 5]]
ตัวอย่างที่ 4
# dtype parameter
import numpy as np
a = np.array([1, 2, 3], dtype = complex)
print a
ผลลัพธ์มีดังนี้ -
[ 1.+0.j, 2.+0.j, 3.+0.j]
ndarrayออบเจ็กต์ประกอบด้วยส่วนหนึ่งมิติของหน่วยความจำคอมพิวเตอร์ที่ต่อเนื่องกันรวมกับโครงร่างการจัดทำดัชนีที่แมปแต่ละรายการกับตำแหน่งในบล็อกหน่วยความจำ บล็อกหน่วยความจำเก็บองค์ประกอบตามลำดับแถวหลัก (สไตล์ C) หรือลำดับคอลัมน์หลัก (สไตล์ FORTRAN หรือ MatLab)
NumPy รองรับประเภทตัวเลขที่หลากหลายมากกว่า Python ตารางต่อไปนี้แสดงประเภทข้อมูลสเกลาร์ต่างๆที่กำหนดไว้ใน NumPy
ซีเนียร์ | ประเภทข้อมูลและคำอธิบาย |
---|---|
1 | bool_ บูลีน (จริงหรือเท็จ) จัดเก็บเป็นไบต์ |
2 | int_ ประเภทจำนวนเต็มเริ่มต้น (เช่นเดียวกับ C long โดยปกติจะเป็น int64 หรือ int32) |
3 | intc เหมือนกับ C int (ปกติคือ int32 หรือ int64) |
4 | intp จำนวนเต็มที่ใช้ในการสร้างดัชนี (เช่นเดียวกับ C ssize_t โดยปกติจะเป็น int32 หรือ int64) |
5 | int8 ไบต์ (-128 ถึง 127) |
6 | int16 จำนวนเต็ม (-32768 ถึง 32767) |
7 | int32 จำนวนเต็ม (-2147483648 ถึง 2147483647) |
8 | int64 จำนวนเต็ม (-9223372036854775808 ถึง 9223372036854775807) |
9 | uint8 จำนวนเต็มไม่ได้ลงนาม (0 ถึง 255) |
10 | uint16 จำนวนเต็มที่ไม่ได้ลงชื่อ (0 ถึง 65535) |
11 | uint32 จำนวนเต็มที่ไม่ได้ลงชื่อ (0 ถึง 4294967295) |
12 | uint64 จำนวนเต็มที่ไม่ได้ลงชื่อ (0 ถึง 18446744073709551615) |
13 | float_ ชวเลขสำหรับ float64 |
14 | float16 ลูกลอยที่มีความแม่นยำครึ่งหนึ่ง: บิตเครื่องหมาย, เลขยกกำลัง 5 บิต, แมนทิสซา 10 บิต |
15 | float32 single precision float: sign bit, 8 bits exponent, 23 bits mantissa |
16 | float64 double precision float: sign bit, 11 bits exponent, 52 bits mantissa |
17 | complex_ ชวเลขสำหรับคอมเพล็กซ์ 128 |
18 | complex64 จำนวนเชิงซ้อนแสดงด้วยโฟลต 32 บิตสองตัว (ส่วนประกอบจริงและจินตภาพ) |
19 | complex128 จำนวนเชิงซ้อนแสดงด้วยโฟลต 64 บิตสองตัว (ส่วนประกอบจริงและจินตภาพ) |
ประเภทตัวเลข NumPy คืออินสแตนซ์ของอ็อบเจ็กต์ dtype (data-type) ซึ่งแต่ละชนิดมีลักษณะเฉพาะ dtypes มีให้ใช้งานเป็น np.bool_, np.float32 เป็นต้น
ออบเจ็กต์ประเภทข้อมูล (dtype)
ออบเจ็กต์ประเภทข้อมูลอธิบายการตีความบล็อกหน่วยความจำคงที่ที่สอดคล้องกับอาร์เรย์โดยขึ้นอยู่กับลักษณะต่อไปนี้ -
ประเภทข้อมูล (จำนวนเต็มลอยหรือวัตถุ Python)
ขนาดของข้อมูล
คำสั่งไบต์ (little-endian หรือ big-endian)
ในกรณีของประเภทโครงสร้างชื่อของเขตข้อมูลประเภทข้อมูลของแต่ละเขตข้อมูลและส่วนของบล็อกหน่วยความจำที่แต่ละเขตข้อมูลนำมา
ถ้าชนิดข้อมูลเป็น subarray รูปร่างและชนิดข้อมูล
ลำดับไบต์จะถูกกำหนดโดยนำหน้า '<' หรือ '>' เป็นชนิดข้อมูล '<' หมายความว่าการเข้ารหัสนั้นมีค่าน้อยที่สุด (มีนัยสำคัญน้อยที่สุดจะถูกเก็บไว้ในที่อยู่ที่เล็กที่สุด) '>' หมายความว่าการเข้ารหัสเป็นแบบ big-endian (ไบต์ที่สำคัญที่สุดถูกเก็บไว้ในที่อยู่ที่เล็กที่สุด)
อ็อบเจ็กต์ dtype ถูกสร้างโดยใช้ไวยากรณ์ต่อไปนี้ -
numpy.dtype(object, align, copy)
พารามิเตอร์คือ -
Object - เพื่อแปลงเป็นออบเจ็กต์ประเภทข้อมูล
Align - หากเป็นจริงให้เพิ่มช่องว่างภายในเพื่อให้คล้ายกับ C-struct
Copy- สร้างสำเนาใหม่ของวัตถุ dtype หากเป็นเท็จผลลัพธ์จะอ้างอิงไปยังออบเจ็กต์ชนิดข้อมูลในตัว
ตัวอย่าง 1
# using array-scalar type
import numpy as np
dt = np.dtype(np.int32)
print dt
ผลลัพธ์มีดังนี้ -
int32
ตัวอย่าง 2
#int8, int16, int32, int64 can be replaced by equivalent string 'i1', 'i2','i4', etc.
import numpy as np
dt = np.dtype('i4')
print dt
ผลลัพธ์มีดังนี้ -
int32
ตัวอย่างที่ 3
# using endian notation
import numpy as np
dt = np.dtype('>i4')
print dt
ผลลัพธ์มีดังนี้ -
>i4
ตัวอย่างต่อไปนี้แสดงการใช้ประเภทข้อมูลที่มีโครงสร้าง ที่นี่ชื่อเขตข้อมูลและชนิดข้อมูลสเกลาร์ที่เกี่ยวข้องจะถูกประกาศ
ตัวอย่างที่ 4
# first create structured data type
import numpy as np
dt = np.dtype([('age',np.int8)])
print dt
ผลลัพธ์มีดังนี้ -
[('age', 'i1')]
ตัวอย่างที่ 5
# now apply it to ndarray object
import numpy as np
dt = np.dtype([('age',np.int8)])
a = np.array([(10,),(20,),(30,)], dtype = dt)
print a
ผลลัพธ์มีดังนี้ -
[(10,) (20,) (30,)]
ตัวอย่างที่ 6
# file name can be used to access content of age column
import numpy as np
dt = np.dtype([('age',np.int8)])
a = np.array([(10,),(20,),(30,)], dtype = dt)
print a['age']
ผลลัพธ์มีดังนี้ -
[10 20 30]
ตัวอย่างที่ 7
ตัวอย่างต่อไปนี้กำหนดประเภทข้อมูลที่มีโครงสร้างที่เรียกว่า student ด้วยฟิลด์สตริง 'name', an integer field 'อายุ' และ float field'เครื่องหมาย'. dtype นี้ใช้กับอ็อบเจ็กต์ ndarray
import numpy as np
student = np.dtype([('name','S20'), ('age', 'i1'), ('marks', 'f4')])
print student
ผลลัพธ์มีดังนี้ -
[('name', 'S20'), ('age', 'i1'), ('marks', '<f4')])
ตัวอย่างที่ 8
import numpy as np
student = np.dtype([('name','S20'), ('age', 'i1'), ('marks', 'f4')])
a = np.array([('abc', 21, 50),('xyz', 18, 75)], dtype = student)
print a
ผลลัพธ์มีดังนี้ -
[('abc', 21, 50.0), ('xyz', 18, 75.0)]
ข้อมูลในตัวแต่ละประเภทมีรหัสอักขระที่ระบุโดยไม่ซ้ำกัน
'b' - บูลีน
'i' - (ลงชื่อ) จำนวนเต็ม
'u' - จำนวนเต็มไม่ได้ลงนาม
'f' - จุดลอยตัว
'c' - จุดลอยตัวที่ซับซ้อน
'm' - เวลา
'M' - วันที่และเวลา
'O' - (Python) วัตถุ
'S', 'a' - สตริง (byte-)
'U' - Unicode
'V' - ข้อมูลดิบ (โมฆะ)
ในบทนี้เราจะพูดถึงคุณลักษณะอาร์เรย์ต่างๆของ NumPy
ndarray.shape
แอตทริบิวต์อาร์เรย์นี้ส่งคืนทูเพิลที่ประกอบด้วยมิติอาร์เรย์ นอกจากนี้ยังสามารถใช้เพื่อปรับขนาดอาร์เรย์
ตัวอย่าง 1
import numpy as np
a = np.array([[1,2,3],[4,5,6]])
print a.shape
ผลลัพธ์มีดังนี้ -
(2, 3)
ตัวอย่าง 2
# this resizes the ndarray
import numpy as np
a = np.array([[1,2,3],[4,5,6]])
a.shape = (3,2)
print a
ผลลัพธ์มีดังนี้ -
[[1, 2]
[3, 4]
[5, 6]]
ตัวอย่างที่ 3
NumPy ยังมีฟังก์ชัน reshape เพื่อปรับขนาดอาร์เรย์
import numpy as np
a = np.array([[1,2,3],[4,5,6]])
b = a.reshape(3,2)
print b
ผลลัพธ์มีดังนี้ -
[[1, 2]
[3, 4]
[5, 6]]
ndarray.ndim
แอตทริบิวต์อาร์เรย์นี้ส่งกลับจำนวนมิติอาร์เรย์
ตัวอย่าง 1
# an array of evenly spaced numbers
import numpy as np
a = np.arange(24)
print a
ผลลัพธ์มีดังนี้ -
[0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23]
ตัวอย่าง 2
# this is one dimensional array
import numpy as np
a = np.arange(24)
a.ndim
# now reshape it
b = a.reshape(2,4,3)
print b
# b is having three dimensions
ผลลัพธ์มีดังนี้ -
[[[ 0, 1, 2]
[ 3, 4, 5]
[ 6, 7, 8]
[ 9, 10, 11]]
[[12, 13, 14]
[15, 16, 17]
[18, 19, 20]
[21, 22, 23]]]
numpy.itemsize
แอตทริบิวต์อาร์เรย์นี้ส่งกลับความยาวของแต่ละองค์ประกอบของอาร์เรย์เป็นไบต์
ตัวอย่าง 1
# dtype of array is int8 (1 byte)
import numpy as np
x = np.array([1,2,3,4,5], dtype = np.int8)
print x.itemsize
ผลลัพธ์มีดังนี้ -
1
ตัวอย่าง 2
# dtype of array is now float32 (4 bytes)
import numpy as np
x = np.array([1,2,3,4,5], dtype = np.float32)
print x.itemsize
ผลลัพธ์มีดังนี้ -
4
numpy.flags
อ็อบเจ็กต์ ndarray มีคุณสมบัติดังต่อไปนี้ ค่าปัจจุบันจะถูกส่งกลับโดยฟังก์ชันนี้
ซีเนียร์ | คุณสมบัติและคำอธิบาย |
---|---|
1 | C_CONTIGUOUS (C) ข้อมูลอยู่ในเซกเมนต์ต่อเนื่องสไตล์ C เดียว |
2 | F_CONTIGUOUS (F) ข้อมูลอยู่ในกลุ่มเดียวที่ต่อเนื่องกันสไตล์ Fortran |
3 | OWNDATA (O) อาร์เรย์เป็นเจ้าของหน่วยความจำที่ใช้หรือยืมจากวัตถุอื่น |
4 | WRITEABLE (W) พื้นที่ข้อมูลสามารถเขียนถึง การตั้งค่านี้เป็น False จะล็อกข้อมูลทำให้เป็นแบบอ่านอย่างเดียว |
5 | ALIGNED (A) ข้อมูลและองค์ประกอบทั้งหมดได้รับการจัดวางอย่างเหมาะสมสำหรับฮาร์ดแวร์ |
6 | UPDATEIFCOPY (U) อาร์เรย์นี้เป็นสำเนาของอาร์เรย์อื่น ๆ เมื่ออาร์เรย์นี้ถูกยกเลิกการจัดสรรอาร์เรย์พื้นฐานจะถูกอัปเดตด้วยเนื้อหาของอาร์เรย์นี้ |
ตัวอย่าง
ตัวอย่างต่อไปนี้แสดงค่าปัจจุบันของแฟล็ก
import numpy as np
x = np.array([1,2,3,4,5])
print x.flags
ผลลัพธ์มีดังนี้ -
C_CONTIGUOUS : True
F_CONTIGUOUS : True
OWNDATA : True
WRITEABLE : True
ALIGNED : True
UPDATEIFCOPY : False
ใหม่ ndarray ออบเจ็กต์สามารถสร้างโดยรูทีนการสร้างอาร์เรย์ใด ๆ ต่อไปนี้หรือใช้ตัวสร้าง ndarray ระดับต่ำ
numpy.empty
สร้างอาร์เรย์ที่ไม่ได้กำหนดค่าเริ่มต้นของรูปร่างและประเภทที่ระบุ ใช้ตัวสร้างต่อไปนี้ -
numpy.empty(shape, dtype = float, order = 'C')
ตัวสร้างรับพารามิเตอร์ต่อไปนี้
ซีเนียร์ | พารามิเตอร์และคำอธิบาย |
---|---|
1 | Shape รูปร่างของอาร์เรย์ว่างใน int หรือทูเปิลของ int |
2 | Dtype ประเภทข้อมูลเอาต์พุตที่ต้องการ ไม่จำเป็น |
3 | Order 'C' สำหรับอาร์เรย์หลักแถวสไตล์ C, 'F' สำหรับอาร์เรย์หลักคอลัมน์สไตล์ FORTRAN |
ตัวอย่าง
โค้ดต่อไปนี้แสดงตัวอย่างของอาร์เรย์ว่าง
import numpy as np
x = np.empty([3,2], dtype = int)
print x
ผลลัพธ์มีดังนี้ -
[[22649312 1701344351]
[1818321759 1885959276]
[16779776 156368896]]
Note - องค์ประกอบในอาร์เรย์แสดงค่าสุ่มเนื่องจากไม่ได้เริ่มต้น
numpy.zeros
ส่งคืนอาร์เรย์ใหม่ของขนาดที่ระบุซึ่งเต็มไปด้วยศูนย์
numpy.zeros(shape, dtype = float, order = 'C')
ตัวสร้างรับพารามิเตอร์ต่อไปนี้
ซีเนียร์ | พารามิเตอร์และคำอธิบาย |
---|---|
1 | Shape รูปร่างของอาร์เรย์ว่างใน int หรือลำดับของ int |
2 | Dtype ประเภทข้อมูลเอาต์พุตที่ต้องการ ไม่จำเป็น |
3 | Order 'C' สำหรับอาร์เรย์หลักแถวสไตล์ C, 'F' สำหรับอาร์เรย์หลักคอลัมน์สไตล์ FORTRAN |
ตัวอย่าง 1
# array of five zeros. Default dtype is float
import numpy as np
x = np.zeros(5)
print x
ผลลัพธ์มีดังนี้ -
[ 0. 0. 0. 0. 0.]
ตัวอย่าง 2
import numpy as np
x = np.zeros((5,), dtype = np.int)
print x
ตอนนี้ผลลัพธ์จะเป็นดังนี้ -
[0 0 0 0 0]
ตัวอย่างที่ 3
# custom type
import numpy as np
x = np.zeros((2,2), dtype = [('x', 'i4'), ('y', 'i4')])
print x
ควรให้ผลลัพธ์ดังต่อไปนี้ -
[[(0,0)(0,0)]
[(0,0)(0,0)]]
numpy.ones
ส่งคืนอาร์เรย์ใหม่ของขนาดและประเภทที่ระบุซึ่งเต็มไปด้วยอาร์เรย์
numpy.ones(shape, dtype = None, order = 'C')
ตัวสร้างรับพารามิเตอร์ต่อไปนี้
ซีเนียร์ | พารามิเตอร์และคำอธิบาย |
---|---|
1 | Shape รูปร่างของอาร์เรย์ว่างใน int หรือทูเปิลของ int |
2 | Dtype ประเภทข้อมูลเอาต์พุตที่ต้องการ ไม่จำเป็น |
3 | Order 'C' สำหรับอาร์เรย์หลักแถวสไตล์ C, 'F' สำหรับอาร์เรย์หลักคอลัมน์สไตล์ FORTRAN |
ตัวอย่าง 1
# array of five ones. Default dtype is float
import numpy as np
x = np.ones(5)
print x
ผลลัพธ์มีดังนี้ -
[ 1. 1. 1. 1. 1.]
ตัวอย่าง 2
import numpy as np
x = np.ones([2,2], dtype = int)
print x
ตอนนี้ผลลัพธ์จะเป็นดังนี้ -
[[1 1]
[1 1]]
ในบทนี้เราจะพูดถึงวิธีการสร้างอาร์เรย์จากข้อมูลที่มีอยู่
numpy.asarray
ฟังก์ชันนี้คล้ายกับ numpy.array ยกเว้นข้อเท็จจริงที่ว่ามีพารามิเตอร์น้อยกว่า รูทีนนี้มีประโยชน์สำหรับการแปลงลำดับ Python เป็น ndarray
numpy.asarray(a, dtype = None, order = None)
ตัวสร้างรับพารามิเตอร์ต่อไปนี้
ซีเนียร์ | พารามิเตอร์และคำอธิบาย |
---|---|
1 | a ป้อนข้อมูลในรูปแบบใด ๆ เช่น list, list of tuples, tuples, tuple of tuples หรือ tuple of list |
2 | dtype ตามค่าเริ่มต้นชนิดข้อมูลของข้อมูลอินพุตจะถูกนำไปใช้กับ ndarray ที่เป็นผลลัพธ์ |
3 | order C (หลักแถว) หรือ F (หลักของคอลัมน์) C เป็นค่าเริ่มต้น |
ตัวอย่างต่อไปนี้แสดงให้เห็นว่าคุณสามารถใช้ไฟล์ asarray ฟังก์ชัน
ตัวอย่าง 1
# convert list to ndarray
import numpy as np
x = [1,2,3]
a = np.asarray(x)
print a
ผลลัพธ์จะเป็นดังนี้ -
[1 2 3]
ตัวอย่าง 2
# dtype is set
import numpy as np
x = [1,2,3]
a = np.asarray(x, dtype = float)
print a
ตอนนี้ผลลัพธ์จะเป็นดังนี้ -
[ 1. 2. 3.]
ตัวอย่างที่ 3
# ndarray from tuple
import numpy as np
x = (1,2,3)
a = np.asarray(x)
print a
ผลลัพธ์จะเป็น -
[1 2 3]
ตัวอย่างที่ 4
# ndarray from list of tuples
import numpy as np
x = [(1,2,3),(4,5)]
a = np.asarray(x)
print a
ที่นี่ผลลัพธ์จะเป็นดังนี้ -
[(1, 2, 3) (4, 5)]
numpy.frombuffer
ฟังก์ชันนี้ตีความบัฟเฟอร์เป็นอาร์เรย์หนึ่งมิติ อ็อบเจ็กต์ใด ๆ ที่แสดงอินเตอร์เฟสบัฟเฟอร์ถูกใช้เป็นพารามิเตอร์เพื่อส่งคืนไฟล์ndarray.
numpy.frombuffer(buffer, dtype = float, count = -1, offset = 0)
ตัวสร้างรับพารามิเตอร์ต่อไปนี้
ซีเนียร์ | พารามิเตอร์และคำอธิบาย |
---|---|
1 | buffer วัตถุใด ๆ ที่แสดงส่วนต่อประสานบัฟเฟอร์ |
2 | dtype ชนิดข้อมูลของ ndarray ที่ส่งคืน ค่าเริ่มต้นคือลอย |
3 | count จำนวนรายการที่จะอ่านค่าเริ่มต้น -1 หมายถึงข้อมูลทั้งหมด |
4 | offset ตำแหน่งเริ่มต้นที่จะอ่าน ค่าเริ่มต้นคือ 0 |
ตัวอย่าง
ตัวอย่างต่อไปนี้แสดงให้เห็นถึงการใช้ frombuffer ฟังก์ชัน
import numpy as np
s = 'Hello World'
a = np.frombuffer(s, dtype = 'S1')
print a
นี่คือผลลัพธ์ -
['H' 'e' 'l' 'l' 'o' ' ' 'W' 'o' 'r' 'l' 'd']
numpy.fromiter
ฟังก์ชันนี้สร้างไฟล์ ndarrayวัตถุจากวัตถุที่ทำซ้ำได้ ฟังก์ชันนี้จะส่งคืนอาร์เรย์หนึ่งมิติใหม่
numpy.fromiter(iterable, dtype, count = -1)
ที่นี่ตัวสร้างใช้พารามิเตอร์ต่อไปนี้
ซีเนียร์ | พารามิเตอร์และคำอธิบาย |
---|---|
1 | iterable วัตถุที่ทำซ้ำได้ |
2 | dtype ชนิดข้อมูลของอาร์เรย์ผลลัพธ์ |
3 | count จำนวนรายการที่จะอ่านจาก iterator ค่าเริ่มต้นคือ -1 ซึ่งหมายถึงข้อมูลทั้งหมดที่จะอ่าน |
ตัวอย่างต่อไปนี้แสดงวิธีการใช้งานในตัว range()ฟังก์ชันเพื่อส่งคืนวัตถุรายการ ตัววนซ้ำของรายการนี้ใช้เพื่อสร้างไฟล์ndarray วัตถุ.
ตัวอย่าง 1
# create list object using range function
import numpy as np
list = range(5)
print list
ผลลัพธ์มีดังนี้ -
[0, 1, 2, 3, 4]
ตัวอย่าง 2
# obtain iterator object from list
import numpy as np
list = range(5)
it = iter(list)
# use iterator to create ndarray
x = np.fromiter(it, dtype = float)
print x
ตอนนี้ผลลัพธ์จะเป็นดังนี้ -
[0. 1. 2. 3. 4.]
ในบทนี้เราจะดูวิธีสร้างอาร์เรย์จากช่วงตัวเลข
numpy.arange
ฟังก์ชันนี้ส่งคืนไฟล์ ndarrayวัตถุที่มีค่าระยะห่างเท่า ๆ กันภายในช่วงที่กำหนด รูปแบบของฟังก์ชันมีดังนี้ -
numpy.arange(start, stop, step, dtype)
ตัวสร้างรับพารามิเตอร์ต่อไปนี้
ซีเนียร์ | พารามิเตอร์และคำอธิบาย |
---|---|
1 | start จุดเริ่มต้นของช่วงเวลา หากละเว้นค่าเริ่มต้นคือ 0 |
2 | stop จุดสิ้นสุดของช่วงเวลา (ไม่รวมตัวเลขนี้) |
3 | step ระยะห่างระหว่างค่าเริ่มต้นคือ 1 |
4 | dtype ชนิดข้อมูลของ ndarray ที่เป็นผลลัพธ์ หากไม่ระบุจะใช้ประเภทข้อมูลอินพุต |
ตัวอย่างต่อไปนี้แสดงให้เห็นว่าคุณสามารถใช้ฟังก์ชันนี้ได้อย่างไร
ตัวอย่าง 1
import numpy as np
x = np.arange(5)
print x
ผลลัพธ์จะเป็นดังนี้ -
[0 1 2 3 4]
ตัวอย่าง 2
import numpy as np
# dtype set
x = np.arange(5, dtype = float)
print x
ที่นี่ผลลัพธ์จะเป็น -
[0. 1. 2. 3. 4.]
ตัวอย่างที่ 3
# start and stop parameters set
import numpy as np
x = np.arange(10,20,2)
print x
ผลลัพธ์มีดังนี้ -
[10 12 14 16 18]
numpy.linspace
ฟังก์ชันนี้คล้ายกับ arange()ฟังก์ชัน ในฟังก์ชันนี้แทนที่จะเป็นขนาดขั้นตอนจะมีการระบุจำนวนค่าที่เว้นระยะเท่า ๆ กันระหว่างช่วงเวลา การใช้งานฟังก์ชั่นนี้มีดังนี้ -
numpy.linspace(start, stop, num, endpoint, retstep, dtype)
ตัวสร้างรับพารามิเตอร์ต่อไปนี้
ซีเนียร์ | พารามิเตอร์และคำอธิบาย |
---|---|
1 | start ค่าเริ่มต้นของลำดับ |
2 | stop ค่าสิ้นสุดของลำดับที่รวมอยู่ในลำดับหากจุดสิ้นสุดตั้งค่าเป็นจริง |
3 | num จำนวนตัวอย่างที่เว้นระยะเท่า ๆ กันที่จะสร้าง ค่าเริ่มต้นคือ 50 |
4 | endpoint เป็นจริงตามค่าเริ่มต้นดังนั้นค่าหยุดจะรวมอยู่ในลำดับ หากเป็นเท็จจะไม่รวมอยู่ด้วย |
5 | retstep ถ้าเป็นจริงให้ส่งคืนตัวอย่างและขั้นตอนระหว่างตัวเลขที่ต่อเนื่องกัน |
6 | dtype ประเภทข้อมูลของเอาต์พุต ndarray |
ตัวอย่างต่อไปนี้แสดงให้เห็นถึงการใช้งาน linspace ฟังก์ชัน
ตัวอย่าง 1
import numpy as np
x = np.linspace(10,20,5)
print x
ผลลัพธ์จะเป็น -
[10. 12.5 15. 17.5 20.]
ตัวอย่าง 2
# endpoint set to false
import numpy as np
x = np.linspace(10,20, 5, endpoint = False)
print x
ผลลัพธ์จะเป็น -
[10. 12. 14. 16. 18.]
ตัวอย่างที่ 3
# find retstep value
import numpy as np
x = np.linspace(1,2,5, retstep = True)
print x
# retstep here is 0.25
ตอนนี้ผลลัพธ์จะเป็น -
(array([ 1. , 1.25, 1.5 , 1.75, 2. ]), 0.25)
numpy.logspace
ฟังก์ชันนี้ส่งคืนไฟล์ ndarrayวัตถุที่มีตัวเลขที่เว้นระยะเท่า ๆ กันบนมาตราส่วนบันทึก จุดเริ่มต้นและจุดสิ้นสุดของมาตราส่วนคือดัชนีของฐานโดยทั่วไปคือ 10
numpy.logspace(start, stop, num, endpoint, base, dtype)
พารามิเตอร์ต่อไปนี้กำหนดผลลัพธ์ของ logspace ฟังก์ชัน
ซีเนียร์ | พารามิเตอร์และคำอธิบาย |
---|---|
1 | start จุดเริ่มต้นของลำดับคือการเริ่มต้นฐาน |
2 | stop ค่าสุดท้ายของลำดับคือฐานหยุด |
3 | num จำนวนค่าระหว่างช่วง ค่าเริ่มต้นคือ 50 |
4 | endpoint ถ้าเป็นจริงหยุดเป็นค่าสุดท้ายในช่วง |
5 | base ฐานของพื้นที่บันทึกค่าเริ่มต้นคือ 10 |
6 | dtype ชนิดข้อมูลของอาร์เรย์เอาต์พุต หากไม่ได้กำหนดขึ้นอยู่กับอาร์กิวเมนต์อินพุตอื่น ๆ |
ตัวอย่างต่อไปนี้จะช่วยให้คุณเข้าใจไฟล์ logspace ฟังก์ชัน
ตัวอย่าง 1
import numpy as np
# default base is 10
a = np.logspace(1.0, 2.0, num = 10)
print a
ผลลัพธ์จะเป็นดังนี้ -
[ 10. 12.91549665 16.68100537 21.5443469 27.82559402
35.93813664 46.41588834 59.94842503 77.42636827 100. ]
ตัวอย่าง 2
# set base of log space to 2
import numpy as np
a = np.logspace(1,10,num = 10, base = 2)
print a
ตอนนี้ผลลัพธ์จะเป็น -
[ 2. 4. 8. 16. 32. 64. 128. 256. 512. 1024.]
เนื้อหาของอ็อบเจ็กต์ ndarray สามารถเข้าถึงและแก้ไขได้โดยการทำดัชนีหรือแบ่งส่วนเช่นเดียวกับอ็อบเจ็กต์คอนเทนเนอร์ที่สร้างขึ้นใน Python
ดังที่ได้กล่าวไว้ก่อนหน้านี้รายการในวัตถุ ndarray เป็นไปตามดัชนีที่ใช้ศูนย์ มีวิธีการจัดทำดัชนีสามประเภท -field access, basic slicing และ advanced indexing.
การแบ่งส่วนขั้นพื้นฐานเป็นส่วนเสริมของแนวคิดพื้นฐานของ Python ในการแบ่งส่วนเป็น n มิติ วัตถุ Python slice ถูกสร้างขึ้นโดยการให้start, stopและ step พารามิเตอร์ในตัว sliceฟังก์ชัน วัตถุชิ้นนี้ถูกส่งผ่านไปยังอาร์เรย์เพื่อแยกส่วนของอาร์เรย์
ตัวอย่าง 1
import numpy as np
a = np.arange(10)
s = slice(2,7,2)
print a[s]
ผลลัพธ์มีดังนี้ -
[2 4 6]
ในตัวอย่างข้างต้นไฟล์ ndarray วัตถุจัดทำโดย arange()ฟังก์ชัน จากนั้นวัตถุชิ้นจะถูกกำหนดด้วยค่าเริ่มต้นหยุดและขั้นตอนที่ 2, 7 และ 2 ตามลำดับ เมื่อวัตถุชิ้นนี้ถูกส่งไปยัง ndarray ส่วนหนึ่งของมันที่เริ่มต้นด้วยดัชนี 2 ถึง 7 ด้วยขั้นตอนที่ 2 จะถูกหั่นบาง ๆ
ผลลัพธ์เดียวกันนี้สามารถหาได้จากการให้พารามิเตอร์การแบ่งส่วนคั่นด้วยเครื่องหมายจุดคู่: (start: stop: step) โดยตรงกับ ndarray วัตถุ.
ตัวอย่าง 2
import numpy as np
a = np.arange(10)
b = a[2:7:2]
print b
ที่นี่เราจะได้ผลลัพธ์เดียวกัน -
[2 4 6]
หากใส่เพียงพารามิเตอร์เดียวรายการเดียวที่สอดคล้องกับดัชนีจะถูกส่งกลับ หากใส่ a: ไว้ด้านหน้ารายการทั้งหมดจากดัชนีนั้นเป็นต้นไปจะถูกแยกออก หากใช้พารามิเตอร์สองตัว (ด้วย: ระหว่างค่าเหล่านั้น) รายการระหว่างดัชนีทั้งสอง (ไม่รวมดัชนีหยุด) ที่มีขั้นตอนเริ่มต้นจะถูกแบ่งส่วน
ตัวอย่างที่ 3
# slice single item
import numpy as np
a = np.arange(10)
b = a[5]
print b
ผลลัพธ์มีดังนี้ -
5
ตัวอย่างที่ 4
# slice items starting from index
import numpy as np
a = np.arange(10)
print a[2:]
ตอนนี้ผลลัพธ์จะเป็น -
[2 3 4 5 6 7 8 9]
ตัวอย่างที่ 5
# slice items between indexes
import numpy as np
a = np.arange(10)
print a[2:5]
ที่นี่ผลลัพธ์จะเป็น -
[2 3 4]
คำอธิบายข้างต้นใช้กับหลายมิติ ndarray เกินไป.
ตัวอย่างที่ 6
import numpy as np
a = np.array([[1,2,3],[3,4,5],[4,5,6]])
print a
# slice items starting from index
print 'Now we will slice the array from the index a[1:]'
print a[1:]
ผลลัพธ์มีดังนี้ -
[[1 2 3]
[3 4 5]
[4 5 6]]
Now we will slice the array from the index a[1:]
[[3 4 5]
[4 5 6]]
การแบ่งส่วนยังสามารถรวมจุดไข่ปลา (…) เพื่อสร้างทูเพิลที่เลือกที่มีความยาวเท่ากับขนาดของอาร์เรย์ หากใช้จุดไข่ปลาที่ตำแหน่งแถวระบบจะส่งคืน ndarray ที่ประกอบด้วยรายการในแถว
ตัวอย่างที่ 7
# array to begin with
import numpy as np
a = np.array([[1,2,3],[3,4,5],[4,5,6]])
print 'Our array is:'
print a
print '\n'
# this returns array of items in the second column
print 'The items in the second column are:'
print a[...,1]
print '\n'
# Now we will slice all items from the second row
print 'The items in the second row are:'
print a[1,...]
print '\n'
# Now we will slice all items from column 1 onwards
print 'The items column 1 onwards are:'
print a[...,1:]
ผลลัพธ์ของโปรแกรมนี้มีดังนี้ -
Our array is:
[[1 2 3]
[3 4 5]
[4 5 6]]
The items in the second column are:
[2 4 5]
The items in the second row are:
[3 4 5]
The items column 1 onwards are:
[[2 3]
[4 5]
[5 6]]
เป็นไปได้ที่จะทำการเลือกจาก ndarray ที่เป็นลำดับที่ไม่ใช่ทูเพิลอ็อบเจกต์ ndarray ของชนิดข้อมูลจำนวนเต็มหรือบูลีนหรือทูเพิลที่มีอย่างน้อยหนึ่งรายการเป็นอ็อบเจ็กต์ลำดับ การจัดทำดัชนีขั้นสูงจะส่งคืนสำเนาของข้อมูลเสมอ เมื่อเทียบกับสิ่งนี้การแบ่งส่วนจะแสดงเฉพาะมุมมองเท่านั้น
การจัดทำดัชนีขั้นสูงมีสองประเภท - Integer และ Boolean.
การสร้างดัชนีจำนวนเต็ม
กลไกนี้ช่วยในการเลือกรายการใด ๆ โดยพลการในอาร์เรย์ตามดัชนี N มิติ อาร์เรย์จำนวนเต็มแต่ละตัวแทนจำนวนดัชนีในมิตินั้น เมื่อดัชนีประกอบด้วยอาร์เรย์จำนวนเต็มมากเท่าขนาดของ ndarray เป้าหมายมันจะตรงไปตรงมา
ในตัวอย่างต่อไปนี้มีการเลือกองค์ประกอบหนึ่งของคอลัมน์ที่ระบุจากแต่ละแถวของออบเจ็กต์ ndarray ดังนั้นดัชนีแถวจึงมีหมายเลขแถวทั้งหมดและดัชนีคอลัมน์ระบุองค์ประกอบที่จะเลือก
ตัวอย่าง 1
import numpy as np
x = np.array([[1, 2], [3, 4], [5, 6]])
y = x[[0,1,2], [0,1,0]]
print y
ผลลัพธ์จะเป็นดังนี้ -
[1 4 5]
การเลือกประกอบด้วยองค์ประกอบที่ (0,0), (1,1) และ (2,0) จากอาร์เรย์แรก
ในตัวอย่างต่อไปนี้องค์ประกอบที่วางไว้ที่มุมของอาร์เรย์ 4X3 จะถูกเลือก ดัชนีแถวที่เลือกคือ [0, 0] และ [3,3] ในขณะที่ดัชนีคอลัมน์คือ [0,2] และ [0,2]
ตัวอย่าง 2
import numpy as np
x = np.array([[ 0, 1, 2],[ 3, 4, 5],[ 6, 7, 8],[ 9, 10, 11]])
print 'Our array is:'
print x
print '\n'
rows = np.array([[0,0],[3,3]])
cols = np.array([[0,2],[0,2]])
y = x[rows,cols]
print 'The corner elements of this array are:'
print y
ผลลัพธ์ของโปรแกรมนี้มีดังนี้ -
Our array is:
[[ 0 1 2]
[ 3 4 5]
[ 6 7 8]
[ 9 10 11]]
The corner elements of this array are:
[[ 0 2]
[ 9 11]]
การเลือกผลลัพธ์คือวัตถุ ndarray ที่มีองค์ประกอบมุม
การจัดทำดัชนีขั้นสูงและพื้นฐานสามารถรวมกันได้โดยใช้หนึ่งสไลซ์ (:) หรือจุดไข่ปลา (…) กับอาร์เรย์ดัชนี ตัวอย่างต่อไปนี้ใช้สไลซ์สำหรับแถวและดัชนีขั้นสูงสำหรับคอลัมน์ ผลลัพธ์จะเหมือนกันเมื่อใช้ slice สำหรับทั้งสองอย่าง แต่ดัชนีขั้นสูงส่งผลให้เกิดการคัดลอกและอาจมีเค้าโครงหน่วยความจำที่แตกต่างกัน
ตัวอย่างที่ 3
import numpy as np
x = np.array([[ 0, 1, 2],[ 3, 4, 5],[ 6, 7, 8],[ 9, 10, 11]])
print 'Our array is:'
print x
print '\n'
# slicing
z = x[1:4,1:3]
print 'After slicing, our array becomes:'
print z
print '\n'
# using advanced index for column
y = x[1:4,[1,2]]
print 'Slicing using advanced index for column:'
print y
ผลลัพธ์ของโปรแกรมนี้จะเป็นดังนี้ -
Our array is:
[[ 0 1 2]
[ 3 4 5]
[ 6 7 8]
[ 9 10 11]]
After slicing, our array becomes:
[[ 4 5]
[ 7 8]
[10 11]]
Slicing using advanced index for column:
[[ 4 5]
[ 7 8]
[10 11]]
การสร้างดัชนีอาร์เรย์บูลีน
การจัดทำดัชนีขั้นสูงประเภทนี้ใช้เมื่ออ็อบเจ็กต์ผลลัพธ์หมายถึงผลลัพธ์ของการดำเนินการบูลีนเช่นตัวดำเนินการเปรียบเทียบ
ตัวอย่าง 1
ในตัวอย่างนี้รายการที่มากกว่า 5 จะถูกส่งกลับอันเป็นผลมาจากการสร้างดัชนีแบบบูลีน
import numpy as np
x = np.array([[ 0, 1, 2],[ 3, 4, 5],[ 6, 7, 8],[ 9, 10, 11]])
print 'Our array is:'
print x
print '\n'
# Now we will print the items greater than 5
print 'The items greater than 5 are:'
print x[x > 5]
ผลลัพธ์ของโปรแกรมนี้จะเป็น -
Our array is:
[[ 0 1 2]
[ 3 4 5]
[ 6 7 8]
[ 9 10 11]]
The items greater than 5 are:
[ 6 7 8 9 10 11]
ตัวอย่าง 2
ในตัวอย่างนี้องค์ประกอบ NaN (ไม่ใช่ตัวเลข) จะถูกละไว้โดยใช้ ~ (ตัวดำเนินการเสริม)
import numpy as np
a = np.array([np.nan, 1,2,np.nan,3,4,5])
print a[~np.isnan(a)]
ผลลัพธ์จะเป็น -
[ 1. 2. 3. 4. 5.]
ตัวอย่างที่ 3
ตัวอย่างต่อไปนี้แสดงวิธีการกรององค์ประกอบที่ไม่ซับซ้อนออกจากอาร์เรย์
import numpy as np
a = np.array([1, 2+6j, 5, 3.5+5j])
print a[np.iscomplex(a)]
ที่นี่ผลลัพธ์มีดังนี้ -
[2.0+6.j 3.5+5.j]
ระยะ broadcastingหมายถึงความสามารถของ NumPy ในการจัดการอาร์เรย์ที่มีรูปร่างต่างกันระหว่างการคำนวณทางคณิตศาสตร์ การคำนวณทางคณิตศาสตร์บนอาร์เรย์มักจะทำกับองค์ประกอบที่เกี่ยวข้อง หากอาร์เรย์สองอาร์เรย์มีรูปร่างเหมือนกันการดำเนินการเหล่านี้จะดำเนินการได้อย่างราบรื่น
ตัวอย่าง 1
import numpy as np
a = np.array([1,2,3,4])
b = np.array([10,20,30,40])
c = a * b
print c
ผลลัพธ์มีดังนี้ -
[10 40 90 160]
หากขนาดของสองอาร์เรย์ไม่เหมือนกันจะไม่สามารถดำเนินการแบบองค์ประกอบต่อองค์ประกอบได้ อย่างไรก็ตามการดำเนินการกับอาร์เรย์ที่มีรูปร่างไม่เหมือนกันยังคงสามารถทำได้ใน NumPy เนื่องจากความสามารถในการแพร่ภาพ อาร์เรย์ที่เล็กกว่าคือbroadcast ให้มีขนาดของอาร์เรย์ที่ใหญ่ขึ้นเพื่อให้มีรูปร่างที่เข้ากันได้
สามารถออกอากาศได้หากปฏิบัติตามกฎต่อไปนี้ -
อาร์เรย์ที่มีขนาดเล็กกว่า ndim กว่าอีกตัวหนึ่งจะมี '1' อยู่ข้างหน้า
ขนาดในแต่ละมิติของรูปร่างเอาต์พุตสูงสุดของขนาดอินพุตในมิตินั้น
สามารถใช้อินพุตในการคำนวณได้หากขนาดในมิติใดมิติหนึ่งตรงกับขนาดเอาต์พุตหรือค่าเท่ากับ 1
หากอินพุตมีขนาดมิติเป็น 1 รายการข้อมูลแรกในมิตินั้นจะใช้สำหรับการคำนวณทั้งหมดตามมิตินั้น
มีการกล่าวถึงชุดของอาร์เรย์ broadcastable หากกฎข้างต้นให้ผลลัพธ์ที่ถูกต้องและข้อใดข้อหนึ่งต่อไปนี้เป็นจริง -
อาร์เรย์มีรูปร่างเหมือนกันทุกประการ
อาร์เรย์มีขนาดเท่ากันและความยาวของแต่ละมิติเป็นความยาวทั่วไปหรือ 1
อาร์เรย์ที่มีขนาดน้อยเกินไปอาจมีรูปร่างที่นำหน้าด้วยมิติความยาว 1 ดังนั้นคุณสมบัติที่ระบุไว้ข้างต้นจึงเป็นจริง
โปรแกรมต่อไปนี้แสดงตัวอย่างการแพร่ภาพ
ตัวอย่าง 2
import numpy as np
a = np.array([[0.0,0.0,0.0],[10.0,10.0,10.0],[20.0,20.0,20.0],[30.0,30.0,30.0]])
b = np.array([1.0,2.0,3.0])
print 'First array:'
print a
print '\n'
print 'Second array:'
print b
print '\n'
print 'First Array + Second Array'
print a + b
ผลลัพธ์ของโปรแกรมนี้จะเป็นดังนี้ -
First array:
[[ 0. 0. 0.]
[ 10. 10. 10.]
[ 20. 20. 20.]
[ 30. 30. 30.]]
Second array:
[ 1. 2. 3.]
First Array + Second Array
[[ 1. 2. 3.]
[ 11. 12. 13.]
[ 21. 22. 23.]
[ 31. 32. 33.]]
รูปต่อไปนี้แสดงให้เห็นว่าอาร์เรย์ b ออกอากาศเพื่อให้เข้ากันได้กับ a.
แพ็คเกจ NumPy มีอ็อบเจ็กต์ตัววนซ้ำ numpy.nditer. เป็นอ็อบเจ็กต์ตัววนซ้ำหลายมิติที่มีประสิทธิภาพโดยใช้ซึ่งเป็นไปได้ที่จะวนซ้ำบนอาร์เรย์ แต่ละองค์ประกอบของอาร์เรย์ถูกเยี่ยมชมโดยใช้อินเทอร์เฟซ Iterator มาตรฐานของ Python
ให้เราสร้างอาร์เรย์ 3X4 โดยใช้ฟังก์ชัน arange () และทำซ้ำโดยใช้ nditer.
ตัวอย่าง 1
import numpy as np
a = np.arange(0,60,5)
a = a.reshape(3,4)
print 'Original array is:'
print a
print '\n'
print 'Modified array is:'
for x in np.nditer(a):
print x,
ผลลัพธ์ของโปรแกรมนี้มีดังนี้ -
Original array is:
[[ 0 5 10 15]
[20 25 30 35]
[40 45 50 55]]
Modified array is:
0 5 10 15 20 25 30 35 40 45 50 55
ตัวอย่าง 2
ลำดับของการวนซ้ำถูกเลือกให้ตรงกับเลย์เอาต์หน่วยความจำของอาร์เรย์โดยไม่ต้องพิจารณาลำดับที่เจาะจง สิ่งนี้สามารถเห็นได้โดยการวนซ้ำบนทรานสโพสของอาร์เรย์ด้านบน
import numpy as np
a = np.arange(0,60,5)
a = a.reshape(3,4)
print 'Original array is:'
print a
print '\n'
print 'Transpose of the original array is:'
b = a.T
print b
print '\n'
print 'Modified array is:'
for x in np.nditer(b):
print x,
ผลลัพธ์ของโปรแกรมข้างต้นมีดังนี้ -
Original array is:
[[ 0 5 10 15]
[20 25 30 35]
[40 45 50 55]]
Transpose of the original array is:
[[ 0 20 40]
[ 5 25 45]
[10 30 50]
[15 35 55]]
Modified array is:
0 5 10 15 20 25 30 35 40 45 50 55
ลำดับการทำซ้ำ
หากองค์ประกอบเดียวกันถูกจัดเก็บโดยใช้คำสั่งแบบ F ตัววนซ้ำจะเลือกวิธีที่มีประสิทธิภาพมากขึ้นในการทำซ้ำบนอาร์เรย์
ตัวอย่าง 1
import numpy as np
a = np.arange(0,60,5)
a = a.reshape(3,4)
print 'Original array is:'
print a
print '\n'
print 'Transpose of the original array is:'
b = a.T
print b
print '\n'
print 'Sorted in C-style order:'
c = b.copy(order='C')
print c
for x in np.nditer(c):
print x,
print '\n'
print 'Sorted in F-style order:'
c = b.copy(order='F')
print c
for x in np.nditer(c):
print x,
ผลลัพธ์จะเป็นดังนี้ -
Original array is:
[[ 0 5 10 15]
[20 25 30 35]
[40 45 50 55]]
Transpose of the original array is:
[[ 0 20 40]
[ 5 25 45]
[10 30 50]
[15 35 55]]
Sorted in C-style order:
[[ 0 20 40]
[ 5 25 45]
[10 30 50]
[15 35 55]]
0 20 40 5 25 45 10 30 50 15 35 55
Sorted in F-style order:
[[ 0 20 40]
[ 5 25 45]
[10 30 50]
[15 35 55]]
0 5 10 15 20 25 30 35 40 45 50 55
ตัวอย่าง 2
เป็นไปได้ที่จะบังคับ nditer วัตถุที่จะใช้คำสั่งเฉพาะโดยกล่าวถึงอย่างชัดเจน
import numpy as np
a = np.arange(0,60,5)
a = a.reshape(3,4)
print 'Original array is:'
print a
print '\n'
print 'Sorted in C-style order:'
for x in np.nditer(a, order = 'C'):
print x,
print '\n'
print 'Sorted in F-style order:'
for x in np.nditer(a, order = 'F'):
print x,
ผลลัพธ์จะเป็น -
Original array is:
[[ 0 5 10 15]
[20 25 30 35]
[40 45 50 55]]
Sorted in C-style order:
0 5 10 15 20 25 30 35 40 45 50 55
Sorted in F-style order:
0 20 40 5 25 45 10 30 50 15 35 55
การแก้ไขค่าอาร์เรย์
nditer วัตถุมีพารามิเตอร์ทางเลือกอื่นที่เรียกว่า op_flags. ค่าเริ่มต้นคืออ่านอย่างเดียว แต่สามารถตั้งค่าเป็นโหมดอ่านเขียนหรือเขียนอย่างเดียวได้ สิ่งนี้จะเปิดใช้งานการแก้ไของค์ประกอบอาร์เรย์โดยใช้ตัววนซ้ำนี้
ตัวอย่าง
import numpy as np
a = np.arange(0,60,5)
a = a.reshape(3,4)
print 'Original array is:'
print a
print '\n'
for x in np.nditer(a, op_flags = ['readwrite']):
x[...] = 2*x
print 'Modified array is:'
print a
ผลลัพธ์มีดังนี้ -
Original array is:
[[ 0 5 10 15]
[20 25 30 35]
[40 45 50 55]]
Modified array is:
[[ 0 10 20 30]
[ 40 50 60 70]
[ 80 90 100 110]]
ห่วงภายนอก
ตัวสร้างคลาส nditer มี ‘flags’ พารามิเตอร์ซึ่งสามารถรับค่าต่อไปนี้ -
ซีเนียร์ | พารามิเตอร์และคำอธิบาย |
---|---|
1 | c_index สามารถติดตามดัชนี C_order ได้ |
2 | f_index มีการติดตามดัชนี Fortran_order |
3 | multi-index สามารถติดตามประเภทของดัชนีที่มีหนึ่งรายการต่อการวนซ้ำ |
4 | external_loop ทำให้ค่าที่กำหนดให้เป็นอาร์เรย์มิติเดียวที่มีหลายค่าแทนอาร์เรย์มิติศูนย์ |
ตัวอย่าง
ในตัวอย่างต่อไปนี้อาร์เรย์หนึ่งมิติที่สอดคล้องกับแต่ละคอลัมน์จะถูกส่งผ่านโดยตัววนซ้ำ
import numpy as np
a = np.arange(0,60,5)
a = a.reshape(3,4)
print 'Original array is:'
print a
print '\n'
print 'Modified array is:'
for x in np.nditer(a, flags = ['external_loop'], order = 'F'):
print x,
ผลลัพธ์มีดังนี้ -
Original array is:
[[ 0 5 10 15]
[20 25 30 35]
[40 45 50 55]]
Modified array is:
[ 0 20 40] [ 5 25 45] [10 30 50] [15 35 55]
การออกอากาศซ้ำ
หากมีสองอาร์เรย์ broadcastableรวมกัน nditerวัตถุสามารถทำซ้ำได้พร้อมกัน สมมติว่าอาร์เรย์a มีมิติ 3X4 และมีอาร์เรย์อื่น b ของมิติ 1X4 ใช้ตัววนซ้ำประเภทต่อไปนี้ (อาร์เรย์ b ออกอากาศเป็นขนาด a).
ตัวอย่าง
import numpy as np
a = np.arange(0,60,5)
a = a.reshape(3,4)
print 'First array is:'
print a
print '\n'
print 'Second array is:'
b = np.array([1, 2, 3, 4], dtype = int)
print b
print '\n'
print 'Modified array is:'
for x,y in np.nditer([a,b]):
print "%d:%d" % (x,y),
ผลลัพธ์จะเป็นดังนี้ -
First array is:
[[ 0 5 10 15]
[20 25 30 35]
[40 45 50 55]]
Second array is:
[1 2 3 4]
Modified array is:
0:1 5:2 10:3 15:4 20:1 25:2 30:3 35:4 40:1 45:2 50:3 55:4
มีกิจวัตรมากมายในแพ็คเกจ NumPy สำหรับการจัดการองค์ประกอบในวัตถุ ndarray สามารถแบ่งออกเป็นประเภทต่อไปนี้ -
การเปลี่ยนรูปร่าง
ซีเนียร์ | รูปร่างและคำอธิบาย |
---|---|
1 | ก่อร่างใหม่ สร้างรูปร่างใหม่ให้กับอาร์เรย์โดยไม่ต้องเปลี่ยนแปลงข้อมูล |
2 | แบน ตัววนซ้ำ 1 มิติบนอาร์เรย์ |
3 | เรียบ ส่งคืนสำเนาของอาร์เรย์ที่ยุบเป็นมิติเดียว |
4 | เพ้อ ส่งคืนอาร์เรย์แฟล็ตที่ต่อเนื่องกัน |
การดำเนินการเปลี่ยน
ซีเนียร์ | การทำงานและคำอธิบาย |
---|---|
1 | ทรานสโพส อนุญาตขนาดของอาร์เรย์ |
2 | เอ็นดาร์เรย์ที เหมือนกับ self.transpose () |
3 | โรลแอ็กซิส หมุนแกนที่ระบุไปข้างหลัง |
4 | แลกเปลี่ยน เปลี่ยนสองแกนของอาร์เรย์ |
การเปลี่ยนขนาด
ซีเนียร์ | มิติข้อมูลและคำอธิบาย |
---|---|
1 | ออกอากาศ สร้างวัตถุที่เลียนแบบการแพร่ภาพ |
2 | Broadcast_to กระจายอาร์เรย์เป็นรูปร่างใหม่ |
3 | expand_dims ขยายรูปร่างของอาร์เรย์ |
4 | บีบ ลบรายการมิติเดียวออกจากรูปร่างของอาร์เรย์ |
การเข้าร่วมอาร์เรย์
ซีเนียร์ | อาร์เรย์และคำอธิบาย |
---|---|
1 | ต่อกัน รวมลำดับของอาร์เรย์ตามแกนที่มีอยู่ |
2 | ซ้อนกัน รวมลำดับของอาร์เรย์ตามแกนใหม่ |
3 | hstack จัดเรียงอาร์เรย์ตามลำดับตามแนวนอน (คอลัมน์ที่ชาญฉลาด) |
4 | vstack เรียงอาร์เรย์ตามลำดับในแนวตั้ง (แถวที่ชาญฉลาด) |
แยกอาร์เรย์
ซีเนียร์ | อาร์เรย์และคำอธิบาย |
---|---|
1 | แยก แยกอาร์เรย์ออกเป็นอาร์เรย์ย่อยหลายอาร์เรย์ |
2 | hsplit แยกอาร์เรย์ออกเป็นอาร์เรย์ย่อยหลายรายการในแนวนอน (แบบคอลัมน์) |
3 | VSplit แยกอาร์เรย์ออกเป็นอาร์เรย์ย่อยหลายรายการในแนวตั้ง (row-wise) |
การเพิ่ม / ลบองค์ประกอบ
ซีเนียร์ | องค์ประกอบและคำอธิบาย |
---|---|
1 | ปรับขนาด ส่งคืนอาร์เรย์ใหม่ที่มีรูปร่างที่ระบุ |
2 | ผนวก ต่อท้ายค่าที่ท้ายอาร์เรย์ |
3 | แทรก แทรกค่าตามแกนที่กำหนดก่อนดัชนีที่กำหนด |
4 | ลบ ส่งคืนอาร์เรย์ใหม่ที่มีอาร์เรย์ย่อยตามแกนที่ถูกลบ |
5 | ไม่เหมือนใคร ค้นหาองค์ประกอบเฉพาะของอาร์เรย์ |
ต่อไปนี้เป็นฟังก์ชันสำหรับการดำเนินการแบบบิตที่มีอยู่ในแพ็คเกจ NumPy
ซีเนียร์ | การทำงานและคำอธิบาย |
---|---|
1 | bitwise_and คำนวณการดำเนินการและการดำเนินการขององค์ประกอบอาร์เรย์ในระดับบิต |
2 | bitwise_or คำนวณบิตหรือการดำเนินการขององค์ประกอบอาร์เรย์ |
3 | กลับด้าน คำนวณบิตไม่ |
4 | left_shift เลื่อนบิตของการแทนค่าฐานสองไปทางซ้าย |
5 | right_shift เลื่อนบิตของการแทนค่าไบนารีไปทางขวา |
ฟังก์ชันต่อไปนี้ใช้เพื่อดำเนินการกับสตริงแบบเวกเตอร์สำหรับอาร์เรย์ของ dtype numpy.string_ หรือ numpy.unicode_ โดยอิงตามฟังก์ชันสตริงมาตรฐานในไลบรารีในตัวของ Python
ซีเนียร์ | ฟังก์ชั่นและคำอธิบาย |
---|---|
1 | เพิ่ม() ส่งคืนการต่อสายอักขระที่ชาญฉลาดสำหรับสองอาร์เรย์ของ str หรือ Unicode |
2 | คูณ() ส่งคืนสตริงที่มีการเรียงต่อกันหลาย ๆ องค์ประกอบที่ชาญฉลาด |
3 | ศูนย์() ส่งคืนสำเนาของสตริงที่กำหนดโดยมีองค์ประกอบอยู่ตรงกลางสตริงของความยาวที่ระบุ |
4 | ใช้ประโยชน์ () ส่งคืนสำเนาของสตริงที่มีเฉพาะอักขระตัวแรกเป็นตัวพิมพ์ใหญ่ |
5 | หัวข้อ() ส่งคืนชื่อที่ชาญฉลาดขององค์ประกอบที่อยู่ในเวอร์ชันของสตริงหรือยูนิโคด |
6 | ต่ำกว่า () ส่งคืนอาร์เรย์ที่มีองค์ประกอบที่แปลงเป็นตัวพิมพ์เล็ก |
7 | บน () ส่งคืนอาร์เรย์ที่มีองค์ประกอบที่แปลงเป็นตัวพิมพ์ใหญ่ |
8 | แยก () ส่งคืนรายการคำในสตริงโดยใช้ตัวคั่น |
9 | เส้นแบ่ง () ส่งคืนรายการของเส้นในองค์ประกอบโดยทำลายที่ขอบเขตของเส้น |
10 | แถบ () ส่งคืนสำเนาโดยลบอักขระนำหน้าและต่อท้าย |
11 | เข้าร่วม () ส่งคืนสตริงซึ่งเป็นการเชื่อมต่อของสตริงในลำดับ |
12 | แทนที่() ส่งคืนสำเนาของสตริงที่มีสตริงย่อยที่เกิดขึ้นทั้งหมดแทนที่ด้วยสตริงใหม่ |
13 | ถอดรหัส () เรียกใช้ str.decode element-wise |
14 | เข้ารหัส () เรียกใช้ str.encode element-wise |
ฟังก์ชันเหล่านี้กำหนดไว้ในคลาสอาร์เรย์อักขระ (numpy.char) แพ็คเกจ Numarray รุ่นเก่ามีคลาส chararray ฟังก์ชันข้างต้นในคลาส numpy.char มีประโยชน์ในการดำเนินการกับสตริงแบบเวกเตอร์
เป็นที่เข้าใจได้ว่า NumPy มีการดำเนินการทางคณิตศาสตร์จำนวนมาก NumPy มีฟังก์ชันตรีโกณมิติมาตรฐานฟังก์ชันสำหรับการคำนวณทางคณิตศาสตร์การจัดการจำนวนเชิงซ้อน ฯลฯ
ฟังก์ชันตรีโกณมิติ
NumPy มีฟังก์ชันตรีโกณมิติมาตรฐานซึ่งส่งคืนอัตราส่วนตรีโกณมิติสำหรับมุมที่กำหนดเป็นเรเดียน
Example
import numpy as np
a = np.array([0,30,45,60,90])
print 'Sine of different angles:'
# Convert to radians by multiplying with pi/180
print np.sin(a*np.pi/180)
print '\n'
print 'Cosine values for angles in array:'
print np.cos(a*np.pi/180)
print '\n'
print 'Tangent values for given angles:'
print np.tan(a*np.pi/180)
นี่คือผลลัพธ์ -
Sine of different angles:
[ 0. 0.5 0.70710678 0.8660254 1. ]
Cosine values for angles in array:
[ 1.00000000e+00 8.66025404e-01 7.07106781e-01 5.00000000e-01
6.12323400e-17]
Tangent values for given angles:
[ 0.00000000e+00 5.77350269e-01 1.00000000e+00 1.73205081e+00
1.63312394e+16]
arcsin, arcos, และ arctanฟังก์ชันจะส่งกลับค่าผกผันตรีโกณมิติของ sin, cos และ tan ของมุมที่กำหนด ผลลัพธ์ของฟังก์ชันเหล่านี้สามารถตรวจสอบได้โดยnumpy.degrees() function โดยการแปลงเรเดียนเป็นองศา
Example
import numpy as np
a = np.array([0,30,45,60,90])
print 'Array containing sine values:'
sin = np.sin(a*np.pi/180)
print sin
print '\n'
print 'Compute sine inverse of angles. Returned values are in radians.'
inv = np.arcsin(sin)
print inv
print '\n'
print 'Check result by converting to degrees:'
print np.degrees(inv)
print '\n'
print 'arccos and arctan functions behave similarly:'
cos = np.cos(a*np.pi/180)
print cos
print '\n'
print 'Inverse of cos:'
inv = np.arccos(cos)
print inv
print '\n'
print 'In degrees:'
print np.degrees(inv)
print '\n'
print 'Tan function:'
tan = np.tan(a*np.pi/180)
print tan
print '\n'
print 'Inverse of tan:'
inv = np.arctan(tan)
print inv
print '\n'
print 'In degrees:'
print np.degrees(inv)
ผลลัพธ์มีดังนี้ -
Array containing sine values:
[ 0. 0.5 0.70710678 0.8660254 1. ]
Compute sine inverse of angles. Returned values are in radians.
[ 0. 0.52359878 0.78539816 1.04719755 1.57079633]
Check result by converting to degrees:
[ 0. 30. 45. 60. 90.]
arccos and arctan functions behave similarly:
[ 1.00000000e+00 8.66025404e-01 7.07106781e-01 5.00000000e-01
6.12323400e-17]
Inverse of cos:
[ 0. 0.52359878 0.78539816 1.04719755 1.57079633]
In degrees:
[ 0. 30. 45. 60. 90.]
Tan function:
[ 0.00000000e+00 5.77350269e-01 1.00000000e+00 1.73205081e+00
1.63312394e+16]
Inverse of tan:
[ 0. 0.52359878 0.78539816 1.04719755 1.57079633]
In degrees:
[ 0. 30. 45. 60. 90.]
ฟังก์ชันสำหรับการปัดเศษ
numpy.around ()
นี่คือฟังก์ชันที่ส่งกลับค่าที่ปัดเศษเป็นความแม่นยำที่ต้องการ ฟังก์ชันรับพารามิเตอร์ต่อไปนี้
numpy.around(a,decimals)
ที่ไหน
ซีเนียร์ | พารามิเตอร์และคำอธิบาย |
---|---|
1 | a ป้อนข้อมูล |
2 | decimals จำนวนทศนิยมที่จะปัดเศษ ค่าเริ่มต้นคือ 0 ถ้าเป็นค่าลบจำนวนเต็มจะถูกปัดเศษเพื่อวางตำแหน่งทางด้านซ้ายของจุดทศนิยม |
Example
import numpy as np
a = np.array([1.0,5.55, 123, 0.567, 25.532])
print 'Original array:'
print a
print '\n'
print 'After rounding:'
print np.around(a)
print np.around(a, decimals = 1)
print np.around(a, decimals = -1)
สร้างผลลัพธ์ต่อไปนี้ -
Original array:
[ 1. 5.55 123. 0.567 25.532]
After rounding:
[ 1. 6. 123. 1. 26. ]
[ 1. 5.6 123. 0.6 25.5]
[ 0. 10. 120. 0. 30. ]
numpy.floor ()
ฟังก์ชันนี้จะส่งคืนจำนวนเต็มที่มากที่สุดไม่เกินพารามิเตอร์อินพุต ชั้นของscalar x มีขนาดใหญ่ที่สุด integer i, ดังนั้น i <= x. โปรดทราบว่าใน Python พื้นจะปัดเศษจาก 0 เสมอ
Example
import numpy as np
a = np.array([-1.7, 1.5, -0.2, 0.6, 10])
print 'The given array:'
print a
print '\n'
print 'The modified array:'
print np.floor(a)
สร้างผลลัพธ์ต่อไปนี้ -
The given array:
[ -1.7 1.5 -0.2 0.6 10. ]
The modified array:
[ -2. 1. -1. 0. 10.]
numpy.ceil ()
ฟังก์ชัน ceil () จะส่งคืนเพดานของค่าอินพุตนั่นคือเพดานของ scalar x มีขนาดเล็กที่สุด integer i, ดังนั้น i >= x.
Example
import numpy as np
a = np.array([-1.7, 1.5, -0.2, 0.6, 10])
print 'The given array:'
print a
print '\n'
print 'The modified array:'
print np.ceil(a)
มันจะสร้างผลลัพธ์ต่อไปนี้ -
The given array:
[ -1.7 1.5 -0.2 0.6 10. ]
The modified array:
[ -1. 2. -0. 1. 10.]
อาร์เรย์อินพุตสำหรับการดำเนินการทางคณิตศาสตร์เช่น add () ลบ () คูณ () และหาร () ต้องมีรูปร่างเหมือนกันหรือควรเป็นไปตามกฎการกระจายเสียงของอาร์เรย์
ตัวอย่าง
import numpy as np
a = np.arange(9, dtype = np.float_).reshape(3,3)
print 'First array:'
print a
print '\n'
print 'Second array:'
b = np.array([10,10,10])
print b
print '\n'
print 'Add the two arrays:'
print np.add(a,b)
print '\n'
print 'Subtract the two arrays:'
print np.subtract(a,b)
print '\n'
print 'Multiply the two arrays:'
print np.multiply(a,b)
print '\n'
print 'Divide the two arrays:'
print np.divide(a,b)
มันจะสร้างผลลัพธ์ต่อไปนี้ -
First array:
[[ 0. 1. 2.]
[ 3. 4. 5.]
[ 6. 7. 8.]]
Second array:
[10 10 10]
Add the two arrays:
[[ 10. 11. 12.]
[ 13. 14. 15.]
[ 16. 17. 18.]]
Subtract the two arrays:
[[-10. -9. -8.]
[ -7. -6. -5.]
[ -4. -3. -2.]]
Multiply the two arrays:
[[ 0. 10. 20.]
[ 30. 40. 50.]
[ 60. 70. 80.]]
Divide the two arrays:
[[ 0. 0.1 0.2]
[ 0.3 0.4 0.5]
[ 0.6 0.7 0.8]]
ตอนนี้ให้เราพูดถึงฟังก์ชันเลขคณิตที่สำคัญอื่น ๆ ที่มีอยู่ใน NumPy
numpy.reciprocal ()
ฟังก์ชั่นนี้คืนค่าซึ่งกันและกันของอาร์กิวเมนต์ซึ่งเป็นองค์ประกอบที่ชาญฉลาด สำหรับองค์ประกอบที่มีค่าสัมบูรณ์มากกว่า 1 ผลลัพธ์จะเป็น 0 เสมอเนื่องจากวิธีที่ Python จัดการกับการหารจำนวนเต็ม สำหรับจำนวนเต็ม 0 จะมีการออกคำเตือนล้น
ตัวอย่าง
import numpy as np
a = np.array([0.25, 1.33, 1, 0, 100])
print 'Our array is:'
print a
print '\n'
print 'After applying reciprocal function:'
print np.reciprocal(a)
print '\n'
b = np.array([100], dtype = int)
print 'The second array is:'
print b
print '\n'
print 'After applying reciprocal function:'
print np.reciprocal(b)
มันจะสร้างผลลัพธ์ต่อไปนี้ -
Our array is:
[ 0.25 1.33 1. 0. 100. ]
After applying reciprocal function:
main.py:9: RuntimeWarning: divide by zero encountered in reciprocal
print np.reciprocal(a)
[ 4. 0.7518797 1. inf 0.01 ]
The second array is:
[100]
After applying reciprocal function:
[0]
numpy.power ()
ฟังก์ชั่นนี้ถือว่าองค์ประกอบในอาร์เรย์อินพุตแรกเป็นฐานและส่งกลับไปเป็นพลังขององค์ประกอบที่เกี่ยวข้องในอาร์เรย์อินพุตที่สอง
import numpy as np
a = np.array([10,100,1000])
print 'Our array is:'
print a
print '\n'
print 'Applying power function:'
print np.power(a,2)
print '\n'
print 'Second array:'
b = np.array([1,2,3])
print b
print '\n'
print 'Applying power function again:'
print np.power(a,b)
มันจะสร้างผลลัพธ์ต่อไปนี้ -
Our array is:
[ 10 100 1000]
Applying power function:
[ 100 10000 1000000]
Second array:
[1 2 3]
Applying power function again:
[ 10 10000 1000000000]
numpy.mod ()
ฟังก์ชันนี้จะคืนค่าส่วนที่เหลือของการแบ่งองค์ประกอบที่เกี่ยวข้องในอาร์เรย์อินพุต ฟังก์ชั่นnumpy.remainder() ยังให้ผลลัพธ์เดียวกัน
import numpy as np
a = np.array([10,20,30])
b = np.array([3,5,7])
print 'First array:'
print a
print '\n'
print 'Second array:'
print b
print '\n'
print 'Applying mod() function:'
print np.mod(a,b)
print '\n'
print 'Applying remainder() function:'
print np.remainder(a,b)
มันจะสร้างผลลัพธ์ต่อไปนี้ -
First array:
[10 20 30]
Second array:
[3 5 7]
Applying mod() function:
[1 0 2]
Applying remainder() function:
[1 0 2]
ฟังก์ชันต่อไปนี้ใช้เพื่อดำเนินการกับอาร์เรย์ที่มีจำนวนเชิงซ้อน
numpy.real() - ส่งคืนส่วนจริงของอาร์กิวเมนต์ชนิดข้อมูลที่ซับซ้อน
numpy.imag() - ส่งคืนส่วนจินตภาพของอาร์กิวเมนต์ชนิดข้อมูลที่ซับซ้อน
numpy.conj() - ส่งคืนคอนจูเกตที่ซับซ้อนซึ่งได้มาจากการเปลี่ยนสัญลักษณ์ของส่วนจินตภาพ
numpy.angle()- คืนค่ามุมของอาร์กิวเมนต์ที่ซับซ้อน ฟังก์ชันมีพารามิเตอร์องศา ถ้าเป็นจริงมุมในองศาจะถูกส่งกลับมิฉะนั้นมุมจะเป็นเรเดียน
import numpy as np
a = np.array([-5.6j, 0.2j, 11. , 1+1j])
print 'Our array is:'
print a
print '\n'
print 'Applying real() function:'
print np.real(a)
print '\n'
print 'Applying imag() function:'
print np.imag(a)
print '\n'
print 'Applying conj() function:'
print np.conj(a)
print '\n'
print 'Applying angle() function:'
print np.angle(a)
print '\n'
print 'Applying angle() function again (result in degrees)'
print np.angle(a, deg = True)
มันจะสร้างผลลัพธ์ต่อไปนี้ -
Our array is:
[ 0.-5.6j 0.+0.2j 11.+0.j 1.+1.j ]
Applying real() function:
[ 0. 0. 11. 1.]
Applying imag() function:
[-5.6 0.2 0. 1. ]
Applying conj() function:
[ 0.+5.6j 0.-0.2j 11.-0.j 1.-1.j ]
Applying angle() function:
[-1.57079633 1.57079633 0. 0.78539816]
Applying angle() function again (result in degrees)
[-90. 90. 0. 45.]
NumPy มีฟังก์ชันทางสถิติที่มีประโยชน์ไม่น้อยสำหรับการค้นหาค่าเบี่ยงเบนมาตรฐานและค่าความแปรปรวนต่ำสุดค่าสูงสุดเปอร์เซ็นต์ไทล์ ฯลฯ จากองค์ประกอบที่กำหนดในอาร์เรย์ ฟังก์ชั่นอธิบายดังนี้ -
numpy.amin () และ numpy.amax ()
ฟังก์ชันเหล่านี้ส่งคืนค่าต่ำสุดและสูงสุดจากองค์ประกอบในอาร์เรย์ที่กำหนดตามแกนที่ระบุ
ตัวอย่าง
import numpy as np
a = np.array([[3,7,5],[8,4,3],[2,4,9]])
print 'Our array is:'
print a
print '\n'
print 'Applying amin() function:'
print np.amin(a,1)
print '\n'
print 'Applying amin() function again:'
print np.amin(a,0)
print '\n'
print 'Applying amax() function:'
print np.amax(a)
print '\n'
print 'Applying amax() function again:'
print np.amax(a, axis = 0)
มันจะสร้างผลลัพธ์ต่อไปนี้ -
Our array is:
[[3 7 5]
[8 4 3]
[2 4 9]]
Applying amin() function:
[3 3 2]
Applying amin() function again:
[2 4 3]
Applying amax() function:
9
Applying amax() function again:
[8 7 9]
numpy.ptp ()
numpy.ptp() ฟังก์ชันส่งคืนช่วง (สูงสุด - ต่ำสุด) ของค่าตามแกน
import numpy as np
a = np.array([[3,7,5],[8,4,3],[2,4,9]])
print 'Our array is:'
print a
print '\n'
print 'Applying ptp() function:'
print np.ptp(a)
print '\n'
print 'Applying ptp() function along axis 1:'
print np.ptp(a, axis = 1)
print '\n'
print 'Applying ptp() function along axis 0:'
print np.ptp(a, axis = 0)
มันจะสร้างผลลัพธ์ต่อไปนี้ -
Our array is:
[[3 7 5]
[8 4 3]
[2 4 9]]
Applying ptp() function:
7
Applying ptp() function along axis 1:
[4 5 7]
Applying ptp() function along axis 0:
[6 3 6]
numpy.percentile ()
เปอร์เซ็นไทล์ (หรือเซนไทล์) คือการวัดที่ใช้ในสถิติที่ระบุค่าด้านล่างซึ่งเปอร์เซ็นต์ของการสังเกตที่กำหนดในกลุ่มของการสังเกตจะลดลง ฟังก์ชั่นnumpy.percentile() รับอาร์กิวเมนต์ต่อไปนี้
numpy.percentile(a, q, axis)
ที่ไหน
ซีเนียร์ | อาร์กิวเมนต์และคำอธิบาย |
---|---|
1 | a อินพุตอาร์เรย์ |
2 | q เปอร์เซ็นไทล์ที่จะคำนวณต้องอยู่ระหว่าง 0-100 |
3 | axis แกนที่จะคำนวณเปอร์เซ็นไทล์ |
ตัวอย่าง
import numpy as np
a = np.array([[30,40,70],[80,20,10],[50,90,60]])
print 'Our array is:'
print a
print '\n'
print 'Applying percentile() function:'
print np.percentile(a,50)
print '\n'
print 'Applying percentile() function along axis 1:'
print np.percentile(a,50, axis = 1)
print '\n'
print 'Applying percentile() function along axis 0:'
print np.percentile(a,50, axis = 0)
มันจะสร้างผลลัพธ์ต่อไปนี้ -
Our array is:
[[30 40 70]
[80 20 10]
[50 90 60]]
Applying percentile() function:
50.0
Applying percentile() function along axis 1:
[ 40. 20. 60.]
Applying percentile() function along axis 0:
[ 50. 40. 60.]
numpy.median ()
Medianหมายถึงค่าที่แยกครึ่งที่สูงกว่าของตัวอย่างข้อมูลออกจากครึ่งล่าง numpy.median() ฟังก์ชันถูกใช้ตามที่แสดงในโปรแกรมต่อไปนี้
ตัวอย่าง
import numpy as np
a = np.array([[30,65,70],[80,95,10],[50,90,60]])
print 'Our array is:'
print a
print '\n'
print 'Applying median() function:'
print np.median(a)
print '\n'
print 'Applying median() function along axis 0:'
print np.median(a, axis = 0)
print '\n'
print 'Applying median() function along axis 1:'
print np.median(a, axis = 1)
มันจะสร้างผลลัพธ์ต่อไปนี้ -
Our array is:
[[30 65 70]
[80 95 10]
[50 90 60]]
Applying median() function:
65.0
Applying median() function along axis 0:
[ 50. 90. 60.]
Applying median() function along axis 1:
[ 65. 80. 60.]
numpy.mean ()
ค่าเฉลี่ยเลขคณิตคือผลรวมขององค์ประกอบตามแกนหารด้วยจำนวนองค์ประกอบ numpy.mean()ฟังก์ชันส่งกลับค่าเฉลี่ยเลขคณิตขององค์ประกอบในอาร์เรย์ หากกล่าวถึงแกนก็จะคำนวณตามนั้น
ตัวอย่าง
import numpy as np
a = np.array([[1,2,3],[3,4,5],[4,5,6]])
print 'Our array is:'
print a
print '\n'
print 'Applying mean() function:'
print np.mean(a)
print '\n'
print 'Applying mean() function along axis 0:'
print np.mean(a, axis = 0)
print '\n'
print 'Applying mean() function along axis 1:'
print np.mean(a, axis = 1)
มันจะสร้างผลลัพธ์ต่อไปนี้ -
Our array is:
[[1 2 3]
[3 4 5]
[4 5 6]]
Applying mean() function:
3.66666666667
Applying mean() function along axis 0:
[ 2.66666667 3.66666667 4.66666667]
Applying mean() function along axis 1:
[ 2. 4. 5.]
numpy.average ()
ค่าเฉลี่ยถ่วงน้ำหนักเป็นค่าเฉลี่ยที่เกิดจากการคูณของแต่ละองค์ประกอบด้วยปัจจัยที่สะท้อนถึงความสำคัญ numpy.average()ฟังก์ชันคำนวณค่าเฉลี่ยถ่วงน้ำหนักขององค์ประกอบในอาร์เรย์ตามน้ำหนักที่กำหนดในอาร์เรย์อื่น ฟังก์ชันสามารถมีพารามิเตอร์แกน หากไม่ได้ระบุแกนอาร์เรย์จะแบน
เมื่อพิจารณาจากอาร์เรย์ [1,2,3,4] และน้ำหนักที่สอดคล้องกัน [4,3,2,1] ค่าเฉลี่ยถ่วงน้ำหนักจะคำนวณโดยการเพิ่มผลคูณขององค์ประกอบที่เกี่ยวข้องและหารผลรวมด้วยผลรวมของน้ำหนัก
ค่าเฉลี่ยถ่วงน้ำหนัก = (1 * 4 + 2 * 3 + 3 * 2 + 4 * 1) / (4 + 3 + 2 + 1)
ตัวอย่าง
import numpy as np
a = np.array([1,2,3,4])
print 'Our array is:'
print a
print '\n'
print 'Applying average() function:'
print np.average(a)
print '\n'
# this is same as mean when weight is not specified
wts = np.array([4,3,2,1])
print 'Applying average() function again:'
print np.average(a,weights = wts)
print '\n'
# Returns the sum of weights, if the returned parameter is set to True.
print 'Sum of weights'
print np.average([1,2,3, 4],weights = [4,3,2,1], returned = True)
มันจะสร้างผลลัพธ์ต่อไปนี้ -
Our array is:
[1 2 3 4]
Applying average() function:
2.5
Applying average() function again:
2.0
Sum of weights
(2.0, 10.0)
ในอาร์เรย์หลายมิติสามารถระบุแกนสำหรับการคำนวณได้
ตัวอย่าง
import numpy as np
a = np.arange(6).reshape(3,2)
print 'Our array is:'
print a
print '\n'
print 'Modified array:'
wt = np.array([3,5])
print np.average(a, axis = 1, weights = wt)
print '\n'
print 'Modified array:'
print np.average(a, axis = 1, weights = wt, returned = True)
มันจะสร้างผลลัพธ์ต่อไปนี้ -
Our array is:
[[0 1]
[2 3]
[4 5]]
Modified array:
[ 0.625 2.625 4.625]
Modified array:
(array([ 0.625, 2.625, 4.625]), array([ 8., 8., 8.]))
ส่วนเบี่ยงเบนมาตรฐาน
ค่าเบี่ยงเบนมาตรฐานคือรากที่สองของค่าเฉลี่ยของส่วนเบี่ยงเบนกำลังสองจากค่าเฉลี่ย สูตรสำหรับส่วนเบี่ยงเบนมาตรฐานมีดังนี้ -
std = sqrt(mean(abs(x - x.mean())**2))
ถ้าอาร์เรย์คือ [1, 2, 3, 4] ดังนั้นค่าเฉลี่ยของมันคือ 2.5 ดังนั้นค่าเบี่ยงเบนกำลังสองคือ [2.25, 0.25, 0.25, 2.25] และรากที่สองของค่าเฉลี่ยหารด้วย 4 นั่นคือ sqrt (5/4) คือ 1.1180339887498949
ตัวอย่าง
import numpy as np
print np.std([1,2,3,4])
มันจะสร้างผลลัพธ์ต่อไปนี้ -
1.1180339887498949
ความแปรปรวน
ความแปรปรวนคือค่าเฉลี่ยของส่วนเบี่ยงเบนกำลังสองกล่าวคือ mean(abs(x - x.mean())**2). กล่าวอีกนัยหนึ่งค่าเบี่ยงเบนมาตรฐานคือรากที่สองของความแปรปรวน
ตัวอย่าง
import numpy as np
print np.var([1,2,3,4])
มันจะสร้างผลลัพธ์ต่อไปนี้ -
1.25
ฟังก์ชันที่เกี่ยวข้องกับการเรียงลำดับมีให้ใช้งานใน NumPy ฟังก์ชันการเรียงลำดับเหล่านี้ใช้อัลกอริทึมการเรียงลำดับที่แตกต่างกันซึ่งแต่ละฟังก์ชันจะมีลักษณะความเร็วในการดำเนินการประสิทธิภาพกรณีที่เลวร้ายที่สุดพื้นที่ทำงานที่ต้องการและความเสถียรของอัลกอริทึม ตารางต่อไปนี้แสดงการเปรียบเทียบอัลกอริทึมการจัดเรียงสามแบบ
ชนิด | ความเร็ว | กรณีที่เลวร้ายที่สุด | พื้นที่ทำงาน | มั่นคง |
---|---|---|---|---|
'Quicksort' | 1 | O (n ^ 2) | 0 | ไม่ |
"การรวม" | 2 | O (n * บันทึก (n)) | ~ n / 2 | ใช่ |
'heapsort' | 3 | O (n * บันทึก (n)) | 0 | ไม่ |
numpy.sort ()
ฟังก์ชัน sort () ส่งคืนสำเนาที่เรียงลำดับของอาร์เรย์อินพุต มีพารามิเตอร์ดังต่อไปนี้ -
numpy.sort(a, axis, kind, order)
ที่ไหน
ซีเนียร์ | พารามิเตอร์และคำอธิบาย |
---|---|
1 | a อาร์เรย์ที่จะจัดเรียง |
2 | axis แกนที่จะจัดเรียงอาร์เรย์ ถ้าไม่มีอาร์เรย์จะแบนโดยเรียงตามแกนสุดท้าย |
3 | kind ค่าเริ่มต้นคือ Quicksort |
4 | order หากอาร์เรย์มีฟิลด์ลำดับของฟิลด์ที่จะจัดเรียง |
ตัวอย่าง
import numpy as np
a = np.array([[3,7],[9,1]])
print 'Our array is:'
print a
print '\n'
print 'Applying sort() function:'
print np.sort(a)
print '\n'
print 'Sort along axis 0:'
print np.sort(a, axis = 0)
print '\n'
# Order parameter in sort function
dt = np.dtype([('name', 'S10'),('age', int)])
a = np.array([("raju",21),("anil",25),("ravi", 17), ("amar",27)], dtype = dt)
print 'Our array is:'
print a
print '\n'
print 'Order by name:'
print np.sort(a, order = 'name')
มันจะสร้างผลลัพธ์ต่อไปนี้ -
Our array is:
[[3 7]
[9 1]]
Applying sort() function:
[[3 7]
[1 9]]
Sort along axis 0:
[[3 1]
[9 7]]
Our array is:
[('raju', 21) ('anil', 25) ('ravi', 17) ('amar', 27)]
Order by name:
[('amar', 27) ('anil', 25) ('raju', 21) ('ravi', 17)]
numpy.argsort ()
numpy.argsort()ฟังก์ชันทำการจัดเรียงทางอ้อมในอาร์เรย์อินพุตตามแกนที่กำหนดและใช้ประเภทการจัดเรียงที่ระบุเพื่อส่งคืนอาร์เรย์ของดัชนีข้อมูล อาร์เรย์ดัชนีนี้ใช้เพื่อสร้างอาร์เรย์ที่เรียงลำดับ
ตัวอย่าง
import numpy as np
x = np.array([3, 1, 2])
print 'Our array is:'
print x
print '\n'
print 'Applying argsort() to x:'
y = np.argsort(x)
print y
print '\n'
print 'Reconstruct original array in sorted order:'
print x[y]
print '\n'
print 'Reconstruct the original array using loop:'
for i in y:
print x[i],
มันจะสร้างผลลัพธ์ต่อไปนี้ -
Our array is:
[3 1 2]
Applying argsort() to x:
[1 2 0]
Reconstruct original array in sorted order:
[1 2 3]
Reconstruct the original array using loop:
1 2 3
numpy.lexsort ()
ฟังก์ชันดำเนินการจัดเรียงทางอ้อมโดยใช้ลำดับของปุ่ม คีย์สามารถมองเห็นเป็นคอลัมน์ในสเปรดชีต ฟังก์ชันจะส่งคืนอาร์เรย์ของดัชนีโดยใช้ข้อมูลที่เรียงลำดับได้ โปรดทราบว่าคีย์สุดท้ายเป็นคีย์หลักของการจัดเรียง
ตัวอย่าง
import numpy as np
nm = ('raju','anil','ravi','amar')
dv = ('f.y.', 's.y.', 's.y.', 'f.y.')
ind = np.lexsort((dv,nm))
print 'Applying lexsort() function:'
print ind
print '\n'
print 'Use this index to get sorted data:'
print [nm[i] + ", " + dv[i] for i in ind]
มันจะสร้างผลลัพธ์ต่อไปนี้ -
Applying lexsort() function:
[3 1 0 2]
Use this index to get sorted data:
['amar, f.y.', 'anil, s.y.', 'raju, f.y.', 'ravi, s.y.']
โมดูล NumPy มีฟังก์ชันมากมายสำหรับการค้นหาภายในอาร์เรย์ มีฟังก์ชั่นสำหรับการค้นหาค่าสูงสุดค่าต่ำสุดและองค์ประกอบที่ตรงตามเงื่อนไขที่กำหนด
numpy.argmax () และ numpy.argmin ()
ฟังก์ชันทั้งสองนี้ส่งคืนดัชนีขององค์ประกอบสูงสุดและต่ำสุดตามลำดับตามแกนที่กำหนด
ตัวอย่าง
import numpy as np
a = np.array([[30,40,70],[80,20,10],[50,90,60]])
print 'Our array is:'
print a
print '\n'
print 'Applying argmax() function:'
print np.argmax(a)
print '\n'
print 'Index of maximum number in flattened array'
print a.flatten()
print '\n'
print 'Array containing indices of maximum along axis 0:'
maxindex = np.argmax(a, axis = 0)
print maxindex
print '\n'
print 'Array containing indices of maximum along axis 1:'
maxindex = np.argmax(a, axis = 1)
print maxindex
print '\n'
print 'Applying argmin() function:'
minindex = np.argmin(a)
print minindex
print '\n'
print 'Flattened array:'
print a.flatten()[minindex]
print '\n'
print 'Flattened array along axis 0:'
minindex = np.argmin(a, axis = 0)
print minindex
print '\n'
print 'Flattened array along axis 1:'
minindex = np.argmin(a, axis = 1)
print minindex
มันจะสร้างผลลัพธ์ต่อไปนี้ -
Our array is:
[[30 40 70]
[80 20 10]
[50 90 60]]
Applying argmax() function:
7
Index of maximum number in flattened array
[30 40 70 80 20 10 50 90 60]
Array containing indices of maximum along axis 0:
[1 2 0]
Array containing indices of maximum along axis 1:
[2 0 1]
Applying argmin() function:
5
Flattened array:
10
Flattened array along axis 0:
[0 1 1]
Flattened array along axis 1:
[0 2 0]
numpy.nonzero ()
numpy.nonzero() ฟังก์ชันส่งคืนดัชนีขององค์ประกอบที่ไม่ใช่ศูนย์ในอาร์เรย์อินพุต
ตัวอย่าง
import numpy as np
a = np.array([[30,40,0],[0,20,10],[50,0,60]])
print 'Our array is:'
print a
print '\n'
print 'Applying nonzero() function:'
print np.nonzero (a)
มันจะสร้างผลลัพธ์ต่อไปนี้ -
Our array is:
[[30 40 0]
[ 0 20 10]
[50 0 60]]
Applying nonzero() function:
(array([0, 0, 1, 1, 2, 2]), array([0, 1, 1, 2, 0, 2]))
numpy.where ()
ฟังก์ชัน where () ส่งกลับดัชนีขององค์ประกอบในอาร์เรย์อินพุตที่เงื่อนไขที่กำหนดเป็นที่พอใจ
ตัวอย่าง
import numpy as np
x = np.arange(9.).reshape(3, 3)
print 'Our array is:'
print x
print 'Indices of elements > 3'
y = np.where(x > 3)
print y
print 'Use these indices to get elements satisfying the condition'
print x[y]
มันจะสร้างผลลัพธ์ต่อไปนี้ -
Our array is:
[[ 0. 1. 2.]
[ 3. 4. 5.]
[ 6. 7. 8.]]
Indices of elements > 3
(array([1, 1, 2, 2, 2]), array([1, 2, 0, 1, 2]))
Use these indices to get elements satisfying the condition
[ 4. 5. 6. 7. 8.]
numpy.extract ()
extract() ฟังก์ชันส่งคืนองค์ประกอบที่ตรงตามเงื่อนไขใด ๆ
import numpy as np
x = np.arange(9.).reshape(3, 3)
print 'Our array is:'
print x
# define a condition
condition = np.mod(x,2) == 0
print 'Element-wise value of condition'
print condition
print 'Extract elements using condition'
print np.extract(condition, x)
มันจะสร้างผลลัพธ์ต่อไปนี้ -
Our array is:
[[ 0. 1. 2.]
[ 3. 4. 5.]
[ 6. 7. 8.]]
Element-wise value of condition
[[ True False True]
[False True False]
[ True False True]]
Extract elements using condition
[ 0. 2. 4. 6. 8.]
เราได้เห็นแล้วว่าข้อมูลที่เก็บไว้ในหน่วยความจำของคอมพิวเตอร์นั้นขึ้นอยู่กับสถาปัตยกรรมที่ CPU ใช้ อาจเป็น endian น้อย (มีนัยสำคัญน้อยที่สุดจะถูกเก็บไว้ในที่อยู่ที่เล็กที่สุด) หรือ big-endian (ไบต์ที่สำคัญที่สุดในที่อยู่ที่เล็กที่สุด)
numpy.ndarray.byteswap ()
numpy.ndarray.byteswap() ฟังก์ชั่นสลับระหว่างสองการแสดง: bigendian และ little-endian
import numpy as np
a = np.array([1, 256, 8755], dtype = np.int16)
print 'Our array is:'
print a
print 'Representation of data in memory in hexadecimal form:'
print map(hex,a)
# byteswap() function swaps in place by passing True parameter
print 'Applying byteswap() function:'
print a.byteswap(True)
print 'In hexadecimal form:'
print map(hex,a)
# We can see the bytes being swapped
มันจะสร้างผลลัพธ์ต่อไปนี้ -
Our array is:
[1 256 8755]
Representation of data in memory in hexadecimal form:
['0x1', '0x100', '0x2233']
Applying byteswap() function:
[256 1 13090]
In hexadecimal form:
['0x100', '0x1', '0x3322']
ในขณะเรียกใช้ฟังก์ชันบางฟังก์ชันจะส่งคืนสำเนาของอาร์เรย์อินพุตในขณะที่บางส่วนส่งคืนมุมมอง เมื่อเนื้อหาถูกเก็บไว้ในตำแหน่งอื่นจะถูกเรียกCopy. หากในทางกลับกันมีการให้มุมมองที่แตกต่างกันของเนื้อหาหน่วยความจำเดียวกันเราเรียกมันว่าView.
ไม่มีสำเนา
การกำหนดอย่างง่ายจะไม่สร้างสำเนาของวัตถุอาร์เรย์ แต่จะใช้ id เดียวกัน () ของอาร์เรย์เดิมเพื่อเข้าถึง id() ส่งคืนตัวระบุสากลของวัตถุ Python ซึ่งคล้ายกับตัวชี้ใน C
นอกจากนี้การเปลี่ยนแปลงใด ๆ ในอย่างใดอย่างหนึ่งจะสะท้อนให้เห็นในอีกรายการหนึ่ง ตัวอย่างเช่นรูปร่างที่เปลี่ยนไปของรูปทรงหนึ่งจะเปลี่ยนรูปร่างของอีกรูปแบบหนึ่งด้วย
ตัวอย่าง
import numpy as np
a = np.arange(6)
print 'Our array is:'
print a
print 'Applying id() function:'
print id(a)
print 'a is assigned to b:'
b = a
print b
print 'b has same id():'
print id(b)
print 'Change shape of b:'
b.shape = 3,2
print b
print 'Shape of a also gets changed:'
print a
มันจะสร้างผลลัพธ์ต่อไปนี้ -
Our array is:
[0 1 2 3 4 5]
Applying id() function:
139747815479536
a is assigned to b:
[0 1 2 3 4 5]
b has same id():
139747815479536
Change shape of b:
[[0 1]
[2 3]
[4 5]]
Shape of a also gets changed:
[[0 1]
[2 3]
[4 5]]
ดูหรือสำเนาตื้น
NumPy มี ndarray.view()วิธีการซึ่งเป็นวัตถุอาร์เรย์ใหม่ที่ดูข้อมูลเดียวกันของอาร์เรย์เดิม ไม่เหมือนกับกรณีก่อนหน้านี้การเปลี่ยนแปลงขนาดของอาร์เรย์ใหม่จะไม่ทำให้มิติของต้นฉบับเปลี่ยนไป
ตัวอย่าง
import numpy as np
# To begin with, a is 3X2 array
a = np.arange(6).reshape(3,2)
print 'Array a:'
print a
print 'Create view of a:'
b = a.view()
print b
print 'id() for both the arrays are different:'
print 'id() of a:'
print id(a)
print 'id() of b:'
print id(b)
# Change the shape of b. It does not change the shape of a
b.shape = 2,3
print 'Shape of b:'
print b
print 'Shape of a:'
print a
มันจะสร้างผลลัพธ์ต่อไปนี้ -
Array a:
[[0 1]
[2 3]
[4 5]]
Create view of a:
[[0 1]
[2 3]
[4 5]]
id() for both the arrays are different:
id() of a:
140424307227264
id() of b:
140424151696288
Shape of b:
[[0 1 2]
[3 4 5]]
Shape of a:
[[0 1]
[2 3]
[4 5]]
ส่วนของอาร์เรย์สร้างมุมมอง
ตัวอย่าง
import numpy as np
a = np.array([[10,10], [2,3], [4,5]])
print 'Our array is:'
print a
print 'Create a slice:'
s = a[:, :2]
print s
มันจะสร้างผลลัพธ์ต่อไปนี้ -
Our array is:
[[10 10]
[ 2 3]
[ 4 5]]
Create a slice:
[[10 10]
[ 2 3]
[ 4 5]]
สำเนาลึก
ndarray.copy()ฟังก์ชันสร้างสำเนาลึก เป็นสำเนาอาร์เรย์และข้อมูลที่สมบูรณ์และไม่ใช้ร่วมกับอาร์เรย์เดิม
ตัวอย่าง
import numpy as np
a = np.array([[10,10], [2,3], [4,5]])
print 'Array a is:'
print a
print 'Create a deep copy of a:'
b = a.copy()
print 'Array b is:'
print b
#b does not share any memory of a
print 'Can we write b is a'
print b is a
print 'Change the contents of b:'
b[0,0] = 100
print 'Modified array b:'
print b
print 'a remains unchanged:'
print a
มันจะสร้างผลลัพธ์ต่อไปนี้ -
Array a is:
[[10 10]
[ 2 3]
[ 4 5]]
Create a deep copy of a:
Array b is:
[[10 10]
[ 2 3]
[ 4 5]]
Can we write b is a
False
Change the contents of b:
Modified array b:
[[100 10]
[ 2 3]
[ 4 5]]
a remains unchanged:
[[10 10]
[ 2 3]
[ 4 5]]
แพ็คเกจ NumPy มีไลบรารีเมทริกซ์ numpy.matlib. โมดูลนี้มีฟังก์ชันที่ส่งคืนเมทริกซ์แทนอ็อบเจ็กต์ ndarray
matlib.empty ()
matlib.empty()ฟังก์ชันส่งคืนเมทริกซ์ใหม่โดยไม่ต้องเริ่มต้นรายการ ฟังก์ชันรับพารามิเตอร์ต่อไปนี้
numpy.matlib.empty(shape, dtype, order)
ที่ไหน
ซีเนียร์ | พารามิเตอร์และคำอธิบาย |
---|---|
1 | shape int หรือ tuple ของ int การกำหนดรูปร่างของเมทริกซ์ใหม่ |
2 | Dtype ไม่จำเป็น. ชนิดข้อมูลของผลลัพธ์ |
3 | order C หรือ F |
ตัวอย่าง
import numpy.matlib
import numpy as np
print np.matlib.empty((2,2))
# filled with random data
มันจะสร้างผลลัพธ์ต่อไปนี้ -
[[ 2.12199579e-314, 4.24399158e-314]
[ 4.24399158e-314, 2.12199579e-314]]
numpy.matlib.zeros ()
ฟังก์ชันนี้จะส่งคืนเมทริกซ์ที่เต็มไปด้วยศูนย์
import numpy.matlib
import numpy as np
print np.matlib.zeros((2,2))
มันจะสร้างผลลัพธ์ต่อไปนี้ -
[[ 0. 0.]
[ 0. 0.]]
numpy.matlib.ones ()
ฟังก์ชันนี้จะส่งคืนเมทริกซ์ที่เต็มไปด้วย 1s
import numpy.matlib
import numpy as np
print np.matlib.ones((2,2))
มันจะสร้างผลลัพธ์ต่อไปนี้ -
[[ 1. 1.]
[ 1. 1.]]
numpy.matlib.eye ()
ฟังก์ชันนี้จะส่งคืนเมทริกซ์ที่มี 1 ตามเส้นทแยงมุมและเลขศูนย์ที่อื่น ฟังก์ชันรับพารามิเตอร์ต่อไปนี้
numpy.matlib.eye(n, M,k, dtype)
ที่ไหน
ซีเนียร์ | พารามิเตอร์และคำอธิบาย |
---|---|
1 | n จำนวนแถวในเมทริกซ์ผลลัพธ์ |
2 | M จำนวนคอลัมน์ค่าเริ่มต้นคือ n |
3 | k ดัชนีของเส้นทแยงมุม |
4 | dtype ชนิดข้อมูลของผลลัพธ์ |
ตัวอย่าง
import numpy.matlib
import numpy as np
print np.matlib.eye(n = 3, M = 4, k = 0, dtype = float)
มันจะสร้างผลลัพธ์ต่อไปนี้ -
[[ 1. 0. 0. 0.]
[ 0. 1. 0. 0.]
[ 0. 0. 1. 0.]]
numpy.matlib.identity ()
numpy.matlib.identity()ฟังก์ชันจะส่งคืนเมทริกซ์เอกลักษณ์ของขนาดที่กำหนด เมทริกซ์เอกลักษณ์คือเมทริกซ์สี่เหลี่ยมที่มีองค์ประกอบแนวทแยงทั้งหมดเป็น 1
import numpy.matlib
import numpy as np
print np.matlib.identity(5, dtype = float)
มันจะสร้างผลลัพธ์ต่อไปนี้ -
[[ 1. 0. 0. 0. 0.]
[ 0. 1. 0. 0. 0.]
[ 0. 0. 1. 0. 0.]
[ 0. 0. 0. 1. 0.]
[ 0. 0. 0. 0. 1.]]
numpy.matlib.rand ()
numpy.matlib.rand() ฟังก์ชันส่งคืนเมทริกซ์ของขนาดที่กำหนดซึ่งเต็มไปด้วยค่าสุ่ม
ตัวอย่าง
import numpy.matlib
import numpy as np
print np.matlib.rand(3,3)
มันจะสร้างผลลัพธ์ต่อไปนี้ -
[[ 0.82674464 0.57206837 0.15497519]
[ 0.33857374 0.35742401 0.90895076]
[ 0.03968467 0.13962089 0.39665201]]
Noteเมทริกซ์นั้นเป็นสองมิติเสมอในขณะที่ ndarray เป็นอาร์เรย์ n มิติ วัตถุทั้งสองสามารถเปลี่ยนแปลงได้ระหว่างกัน
ตัวอย่าง
import numpy.matlib
import numpy as np
i = np.matrix('1,2;3,4')
print i
มันจะสร้างผลลัพธ์ต่อไปนี้ -
[[1 2]
[3 4]]
ตัวอย่าง
import numpy.matlib
import numpy as np
j = np.asarray(i)
print j
มันจะสร้างผลลัพธ์ต่อไปนี้ -
[[1 2]
[3 4]]
ตัวอย่าง
import numpy.matlib
import numpy as np
k = np.asmatrix (j)
print k
มันจะสร้างผลลัพธ์ต่อไปนี้ -
[[1 2]
[3 4]]
แพ็คเกจ NumPy ประกอบด้วย numpy.linalgโมดูลที่มีฟังก์ชันทั้งหมดที่จำเป็นสำหรับพีชคณิตเชิงเส้น ฟังก์ชันที่สำคัญบางอย่างในโมดูลนี้อธิบายไว้ในตารางต่อไปนี้
ซีเนียร์ | ฟังก์ชั่นและคำอธิบาย |
---|---|
1 | จุด ผลิตภัณฑ์ดอทของสองอาร์เรย์ |
2 | vdot ดอทผลคูณของเวกเตอร์สองตัว |
3 | ด้านใน ผลิตภัณฑ์ภายในของสองอาร์เรย์ |
4 | Matmul ผลคูณเมทริกซ์ของสองอาร์เรย์ |
5 | ดีเทอร์มิแนนต์ คำนวณดีเทอร์มิแนนต์ของอาร์เรย์ |
6 | แก้ แก้สมการเมทริกซ์เชิงเส้น |
7 | Inv ค้นหาผกผันการคูณของเมทริกซ์ |
Matplotlib เป็นไลบรารีพล็อตสำหรับ Python ใช้ร่วมกับ NumPy เพื่อจัดเตรียมสภาพแวดล้อมที่เป็นทางเลือกโอเพ่นซอร์สที่มีประสิทธิภาพสำหรับ MatLab นอกจากนี้ยังสามารถใช้กับชุดเครื่องมือกราฟิกเช่น PyQt และ wxPython
โมดูล Matplotlib เขียนขึ้นครั้งแรกโดย John D. Hunter ตั้งแต่ปี 2012 Michael Droettboom เป็นผู้พัฒนาหลัก ปัจจุบัน Matplotlib ver. 1.5.1 เป็นเวอร์ชันเสถียรที่พร้อมใช้งาน แพคเกจที่มีอยู่ในการกระจายไบนารีเช่นเดียวกับในรูปแบบรหัสที่มาในwww.matplotlib.org
ตามปกติแพ็กเกจจะถูกนำเข้าสู่สคริปต์ Python โดยเพิ่มคำสั่งต่อไปนี้ -
from matplotlib import pyplot as plt
ที่นี่ pyplot()เป็นฟังก์ชันที่สำคัญที่สุดในไลบรารี matplotlib ซึ่งใช้ในการลงจุดข้อมูล 2 มิติ สคริปต์ต่อไปนี้จะพล็อตสมการy = 2x + 5
ตัวอย่าง
import numpy as np
from matplotlib import pyplot as plt
x = np.arange(1,11)
y = 2 * x + 5
plt.title("Matplotlib demo")
plt.xlabel("x axis caption")
plt.ylabel("y axis caption")
plt.plot(x,y)
plt.show()
วัตถุ ndarray x ถูกสร้างขึ้นจาก np.arange() function เป็นค่าบน x axis. ค่าที่สอดคล้องกันบนy axis จะถูกเก็บไว้ในอื่น ndarray object y. ค่าเหล่านี้พล็อตโดยใช้plot() ฟังก์ชันของโมดูลย่อย pyplot ของแพ็คเกจ matplotlib
การแสดงกราฟิกจะแสดงโดย show() ฟังก์ชัน
รหัสด้านบนควรสร้างผลลัพธ์ต่อไปนี้ -
แทนที่จะเป็นกราฟเชิงเส้นคุณสามารถแสดงค่าที่ไม่เหมาะสมได้โดยการเพิ่มสตริงรูปแบบลงในไฟล์ plot()ฟังก์ชัน สามารถใช้อักขระการจัดรูปแบบต่อไปนี้ได้
ซีเนียร์ | ตัวละครและคำอธิบาย |
---|---|
1 | '-' ลักษณะเส้นทึบ |
2 | '--' ลักษณะเส้นประ |
3 | '-.' สไตล์เส้นประ |
4 | ':' ลักษณะเส้นประ |
5 | '.' เครื่องหมายจุด |
6 | ',' เครื่องหมายพิกเซล |
7 | 'o' เครื่องหมายวงกลม |
8 | 'v' เครื่องหมาย Triangle_down |
9 | '^' เครื่องหมาย Triangle_up |
10 | '<' เครื่องหมาย Triangle_left |
11 | '>' เครื่องหมาย Triangle_right |
12 | '1' เครื่องหมาย Tri_down |
13 | '2' เครื่องหมาย Tri_up |
14 | '3' เครื่องหมาย Tri_left |
15 | '4' เครื่องหมาย Tri_right |
16 | 's' เครื่องหมายสี่เหลี่ยม |
17 | 'p' เครื่องหมายห้าเหลี่ยม |
18 | '*' เครื่องหมายดาว |
19 | 'h' เครื่องหมาย Hexagon1 |
20 | 'H' เครื่องหมาย Hexagon2 |
21 | '+' เครื่องหมายบวก |
22 | 'x' เครื่องหมาย X |
23 | 'D' เครื่องหมายเพชร |
24 | 'd' เครื่องหมาย Thin_diamond |
25 | '|' เครื่องหมาย Vline |
26 | '_' เครื่องหมาย Hline |
นอกจากนี้ยังมีการกำหนดตัวย่อสีต่อไปนี้
ตัวละคร | สี |
---|---|
'b' | สีน้ำเงิน |
'g' | เขียว |
'r' | แดง |
'ค' | สีฟ้า |
'm' | ม่วงแดง |
'y' | สีเหลือง |
'k' | ดำ |
'w' | สีขาว |
หากต้องการแสดงวงกลมที่แสดงจุดแทนเส้นในตัวอย่างข้างต้นให้ใช้ “ob” เป็นสตริงรูปแบบในฟังก์ชัน plot ()
ตัวอย่าง
import numpy as np
from matplotlib import pyplot as plt
x = np.arange(1,11)
y = 2 * x + 5
plt.title("Matplotlib demo")
plt.xlabel("x axis caption")
plt.ylabel("y axis caption")
plt.plot(x,y,"ob")
plt.show()
รหัสด้านบนควรสร้างผลลัพธ์ต่อไปนี้ -
แผนไซน์เวฟ
สคริปต์ต่อไปนี้สร้างไฟล์ sine wave plot ใช้ matplotlib
ตัวอย่าง
import numpy as np
import matplotlib.pyplot as plt
# Compute the x and y coordinates for points on a sine curve
x = np.arange(0, 3 * np.pi, 0.1)
y = np.sin(x)
plt.title("sine wave form")
# Plot the points using matplotlib
plt.plot(x, y)
plt.show()
แผนการย่อย ()
ฟังก์ชัน subplot () ช่วยให้คุณสามารถพล็อตสิ่งต่างๆในรูปเดียวกันได้ ในสคริปต์ต่อไปนี้sine และ cosine values กำลังวางแผน
ตัวอย่าง
import numpy as np
import matplotlib.pyplot as plt
# Compute the x and y coordinates for points on sine and cosine curves
x = np.arange(0, 3 * np.pi, 0.1)
y_sin = np.sin(x)
y_cos = np.cos(x)
# Set up a subplot grid that has height 2 and width 1,
# and set the first such subplot as active.
plt.subplot(2, 1, 1)
# Make the first plot
plt.plot(x, y_sin)
plt.title('Sine')
# Set the second subplot as active, and make the second plot.
plt.subplot(2, 1, 2)
plt.plot(x, y_cos)
plt.title('Cosine')
# Show the figure.
plt.show()
รหัสด้านบนควรสร้างผลลัพธ์ต่อไปนี้ -
บาร์()
pyplot submodule ให้ bar()ฟังก์ชันในการสร้างกราฟแท่ง ตัวอย่างต่อไปนี้สร้างกราฟแท่งของสองชุดx และ y อาร์เรย์
ตัวอย่าง
from matplotlib import pyplot as plt
x = [5,8,10]
y = [12,16,6]
x2 = [6,9,11]
y2 = [6,15,7]
plt.bar(x, y, align = 'center')
plt.bar(x2, y2, color = 'g', align = 'center')
plt.title('Bar graph')
plt.ylabel('Y axis')
plt.xlabel('X axis')
plt.show()
รหัสนี้ควรสร้างผลลัพธ์ต่อไปนี้ -
NumPy มี numpy.histogram()ฟังก์ชันที่เป็นการแสดงกราฟิกของการแจกแจงความถี่ของข้อมูล รูปสี่เหลี่ยมที่มีขนาดแนวนอนเท่ากันซึ่งสอดคล้องกับช่วงคลาสที่เรียกว่าbin และ variable height สอดคล้องกับความถี่
numpy.histogram ()
ฟังก์ชัน numpy.histogram () รับอาร์เรย์อินพุตและ bins เป็นพารามิเตอร์สองตัว องค์ประกอบต่อเนื่องใน bin array ทำหน้าที่เป็นขอบเขตของแต่ละ bin
import numpy as np
a = np.array([22,87,5,43,56,73,55,54,11,20,51,5,79,31,27])
np.histogram(a,bins = [0,20,40,60,80,100])
hist,bins = np.histogram(a,bins = [0,20,40,60,80,100])
print hist
print bins
มันจะสร้างผลลัพธ์ต่อไปนี้ -
[3 4 5 2 1]
[0 20 40 60 80 100]
plt ()
Matplotlib สามารถแปลงการแสดงตัวเลขของฮิสโตแกรมเป็นกราฟ plt() function ของโมดูลย่อย pyplot ใช้อาร์เรย์ที่มีข้อมูลและ bin array เป็นพารามิเตอร์และแปลงเป็นฮิสโตแกรม
from matplotlib import pyplot as plt
import numpy as np
a = np.array([22,87,5,43,56,73,55,54,11,20,51,5,79,31,27])
plt.hist(a, bins = [0,20,40,60,80,100])
plt.title("histogram")
plt.show()
ควรให้ผลลัพธ์ดังต่อไปนี้ -
อ็อบเจ็กต์ ndarray สามารถบันทึกและโหลดจากไฟล์ดิสก์ ฟังก์ชัน IO ที่พร้อมใช้งาน ได้แก่ -
load() และ save() ฟังก์ชันจัดการ / numPy ไฟล์ไบนารี (ด้วย npy ส่วนขยาย)
loadtxt() และ savetxt() ฟังก์ชันจัดการไฟล์ข้อความปกติ
NumPy แนะนำรูปแบบไฟล์อย่างง่ายสำหรับวัตถุ ndarray นี้.npy ไฟล์เก็บข้อมูลรูปร่าง dtype และข้อมูลอื่น ๆ ที่จำเป็นในการสร้าง ndarray ใหม่ในไฟล์ดิสก์เพื่อให้อาร์เรย์ถูกดึงออกมาอย่างถูกต้องแม้ว่าไฟล์จะอยู่บนเครื่องอื่นที่มีสถาปัตยกรรมต่างกัน
numpy.save ()
numpy.save() ไฟล์เก็บอาร์เรย์อินพุตในไฟล์ดิสก์ด้วย npy ส่วนขยาย.
import numpy as np
a = np.array([1,2,3,4,5])
np.save('outfile',a)
ในการสร้างอาร์เรย์ใหม่จาก outfile.npy, ใช้ load() ฟังก์ชัน
import numpy as np
b = np.load('outfile.npy')
print b
มันจะสร้างผลลัพธ์ต่อไปนี้ -
array([1, 2, 3, 4, 5])
ฟังก์ชัน save () และ load () ยอมรับพารามิเตอร์บูลีนเพิ่มเติม allow_pickles. Pickle ใน Python ใช้เพื่อทำให้เป็นซีเรียลไลซ์และยกเลิกการทำให้เป็นอนุกรมวัตถุก่อนที่จะบันทึกหรืออ่านจากไฟล์ดิสก์
บันทึกข้อความ ()
การจัดเก็บและการดึงข้อมูลอาร์เรย์ในรูปแบบไฟล์ข้อความอย่างง่ายทำได้ด้วย savetxt() และ loadtxt() ฟังก์ชั่น.
ตัวอย่าง
import numpy as np
a = np.array([1,2,3,4,5])
np.savetxt('out.txt',a)
b = np.loadtxt('out.txt')
print b
มันจะสร้างผลลัพธ์ต่อไปนี้ -
[ 1. 2. 3. 4. 5.]
ฟังก์ชัน savetxt () และ loadtxt () ยอมรับพารามิเตอร์ทางเลือกเพิ่มเติมเช่นส่วนหัวส่วนท้ายและตัวคั่น