Thursday, February 21, 2013

NumPy Array ตอนที่ 2 การสร้างและประมวลผล Array

มาว่ากันต่อกับการสร้างและใช้งาน NumPy Array ที่จะช่วยให้การประมวลผลสะดวกขึ้นอีกมากครับ

เราสามารถสร้าง Array ที่มีสมาชิกต่อเนื่องกันได้ โดยการใช้คำสั่ง arange(start,stop,step,dtype) ครับ เช่น

import numpy as np

a = np.arange(5)
b = np.arange(0,5,1, dtype=np.float64)
c = np.arange(0.5,0.1,-0.1)

print(a)
print(b)
print(c)

ผลลัพธ์
[0, 1, 2, 3, 4]
[ 0.,  1.,  2.,  3.,  4.]
[ 0.5,  0.4,  0.3,  0.2]
สังเกตว่าผลลัพธ์ไม่รวมค่า stop ด้วยนะครับ

หรือจะสร้าง Array โดยกำหนดจำนวนสมาชิกก็ได้ จากคำสั่ง linspace(start,stop,number) เช่น

import numpy as np

a = np.linspace(0, 3, 4)

จะได้ผลลัพธ์เป็น
[ 0.,  1.,  2.,  3.]
สังเกตว่ารวม stop ด้วยครับ

ถ้าเรามี Array อยู่แล้ว และต้องการสร้าง zero หรือ one matrix ที่มีขนาดเท่ากับ Array นั้น สามารถใช้คำสั่ง
zeros_like(array)
ones_like(array)
ได้ เช่น

import numpy as np

a = np.array([[11,12], [21,22]])
b = np.zeros_like(a)
c = np.ones_like(a)

ผลลัพธ์
[[11, 12],
  [21, 22]]

[[0, 0],
 [0, 0]]

[[1, 1],
 [1, 1]]

การประมวลผล Array
เราสามารถ +, -, *, /, **(ยกกำลัง) Array กับตัวเลข หรือ กับ Array ด้วยกันได้ ซึ่งจะเป็นการประมวลผลแบบทีละตำแหน่ง (element-wise) เช่น

import numpy as np

a = np.identity(2)
b = np.ones((2,2))
print(a)
print(b)

a = a*2
b = a+b
print(a)
print(b)

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

[[ 1.,  1.],
[ 1.,  1.]]

[[ 2.,  0.],
[ 0.,  2.]]

[[ 3.,  1.],
[ 1.,  3.]]


แต่ถ้าต้องการหาผลคูณแบบเมตริกซ์ของ Array จะใช้คำสั่ง dot(matrix1,matrix2) แทน เช่น

import numpy as np

a = np.identity(2)
b = np.ones((2,2))
print(a)
print(b)

c = a*b
d = np.dot(a,b)
print(c)
print(d)

[[ 1.,  0.],
[ 0.,  1.]]

[[ 1.,  1.],
[ 1.,  1.]]
 
[[ 1.,  0.],
[ 0.,  1.]]

[[ 1.,  1.],
[ 1.,  1.]]

การคำนวณผลสรุปจาก Array
สามารถทำได้ด้วยคำสั่ง เช่น
  • array.max()
  • array.min()
  • array.sum()
ตัวอย่าง

import numpy as np

a = np.array([[2,1],[4,3]])

a.max()
a.min()
a.sum()

ก็จะได้ผลลัพธ์เป็น
4
1
10

เราสามารถกำหนดแถวหรือคอลัมน์ที่ต้องการคำนวณโดยใช้ฟังก์ชันข้างต้นได้ ในรูปแบบ
array.max(axis)
เช่น
array.max(axis=0) หาค่าสูงสุดในแต่ละคอลัมน์
array.max(axis=1) หาค่าสูงสุดในแต่ละแถว

ตัวอย่าง

import numpy as np

a = np.array([[2,1],[4,3]])

a
a.max(axis=0)
a.max(axis=1)

ผลลัพธ์

[[2 1]
 [4 3]]

[4 3]       #[max คอลัมน์1 max คอลัมน์2]

[2 4]       #[max แถว1 max แถว2]

No comments:

Post a Comment