Thursday, February 21, 2013

NumPy Array ตอนที่ 1 การสร้างและคุณสมบัติของ Array

เนื่องจากการเขียนโปรแกรมด้วย python ส่วนใหญ่จะมีการเก็บข้อมูลที่มีหลากหลายรูปแบบ  ข้อมูลบางอย่างเช่นรูปภาพ จะถูกเก็บไว้ในรูปแบบของ NumPy Array ดังนั้นเราจะมาทำความรู้จักมันก่อนครับ

ปกติแล้ว Array ของ Python จะเป็นแค่ 1 มิติ แต่ NumPy Array ถูกออกแบบมาให้รองรับ Array หลายมิติและมีฟังก์ชันการใช้งานที่หลากหลายกว่า

ถ้าต้องการสร้าง NumPy Array จะทำได้หลายวิธี แต่หลักๆแล้วจะใช้คำสั่ง
np.array() ตัวอย่างเช่น

import numpy as np

#1D array
a1 = np.array([1, 2, 3]) 

#2D array
a2 = np.array([ [11, 12], [21, 22] ])

#3D array
a3 = np.array([ [[111, 112], [121, 122]], [[211, 212], [221, 222]] ])

ผลลัพธ์

#a1
array([1, 2, 3])

#a2
array([[11, 12],
       [21, 22]])

#a3
array([[[111, 112],
        [121, 122]],

       [[211, 212],
        [221, 222]]])

ให้สังเกตจำนวนคู่ของ [ ] ที่ครอบทั้งหมดครับ มีกี่คู่ก็คือมิติของ array เป็นเท่านั้น

โดยปกติแล้ว ชนิดของข้อมูลใน NumPy Array จะเป็น int64 หรือ float64

นอกจากนี้แล้ว ในการสร้างเรายังสามารถระบุชนิดของข้อมูล ด้วย flag ชื่อ dtype เช่น
a1 = np.array([1,2,3], dtype=np.float16)

ก็จะได้ array ของ floating-point number (สังเกตเครื่องหมายจุดต่อท้ายตัวเลข)
[ 1.  2.  3.]

และเรายังสามารถใช้คำสั่งในการสร้าง Array พิเศษบางประเภท ที่จำเป็นต่อการประมวลผลภาพ เช่น
  • zeros((row,column,channel),dtype) สร้าง zero matrix
  • ones((row,column,channel),dtype) สร้าง unit matrix
  • identity(size,dtype) สร้าง identity matrix
  • eye(row,column,dtype) สร้าง 2D matrix ที่คล้ายกับ identity matrix แต่ไม่จำเป็นต้องเป็น square matrix
  • หมายเหตุ identity(size) จะเหมือนกับ eye(size)
  • random.rand(row,column) สร้าง uniform random matrix หรือ random.randn(row,column) สำหรับสร้าง normal/Gaussian random matrix
เช่น

import numpy as np

z = np.zeros((2,2), dtype=np.uint8)
o = np.ones((2,2), dtype=np.uint8)
i = np.identity(2, dtype=np.uint8)

print(z)
print(o)
print(i)

ก็จะได้ผลลัพธ์เป็น
[[0 0]
 [0 0]]

[[1 1]
 [1 1]]

[[1 0]
 [0 1]]

Numpy Array ที่สร้างขึ้นมา ก็จะมีคุณสมบัติ เช่น
  • ndarray.ndim มิติ
  • ndarray.shape (แถว, หลัก, จำนวนชั้น)
  • ndarray.size จำนวนสมาชิกของ Array ทั้งหมด
  • ndarray.dtype ชนิดของข้อมูลใน Array นั้น
ตัวอย่างเช่น

import numpy as np

z = np.zeros((3,4))

print(z.ndim)
print(z.shape)
print(z.size)
print(z.dtype)

จะได้ผลลัพธ์เป็น
2
(3, 4)
12
float64

ข้อมูลอ้างอิง
http://www.scipy.org/Tentative_NumPy_Tutorial
http://www.scipy.org/Numpy_Example_List

No comments:

Post a Comment