Friday, February 22, 2013

NumPy Array ตอนที่ 3 Index และการเรียกใช้สมาชิก

Indexing
การเข้าถึงสมาชิกของ Array จะทำผ่าน index โดยจะมีค่าเริ่มต้นเป็น 0 1 2 ไปตามลำดับ และสามารถอ้างอิงจากตัวสุดท้ายมาตัวแรก โดยใช้เลข -1 -2 -3 ไป

import numpy as np 
 
a = np.array([7, 9, 4])

a[0]
a[-1]

ผลลัพธ์
7
4

นอกจากนี้ ยังสามารถใช้เครื่องหมาย : เพื่อระบุช่วงของ index ได้ในรูปแบบ
array[start:end:step] โดยผลลัพธ์จะไม่นับค่า end นะครับ เช่น

a[0:2:1]

ผลลัพธ์ 
[7, 9]

ถ้าใส่แค่ค่า end ค่า start จะเป็น 0 และค่า step จะเป็น 1 เช่น

a[:2]

ผลลัพธ์  
[7, 9]

ถ้าไม่ใส่ค่า end ก็จะทำถึงตัวสุดท้าย เช่น

a[0::2]ผลลัพธ์ 
[7, 4]

นั่นคือ
a[:]
ผลลัพธ์ 
[7, 9, 4]

เราสามารถเปลี่ยนค่าสมาชิกหลายๆตัวพร้อมกันได้ โดยใช้หลักการนี้ เช่น

a[1:3] = 0
จะได้
[7, 0, 0]

และสามารถแสดงผลสมาชิกของ array ด้วยคำสั่ง for และ in

for i in a:
      print i**2

จะได้  
49
0
0

สำหรับ array ตั้งแต่สองมิติเป็นต้นไป index ในแต่ละมิติก็จะแยกกันด้วยเครื่องหมาย , เช่น

b = np.array([ ["00","01"], ["10","11"], ["20","21"] ])

[['00', '01'],
['10', '11'],
['20', '21']]

b.shape
(3, 2)

ถ้าต้องการแถวใดๆ

b[1,:]                          # same as b[1]
['10', '11']

ถ้าต้องการหลักใดๆ

b[:,1]
['01', '11', '21']
กรณีที่เป็น array สามมิติ (ซึ่งก็คือ array ของ array สองมิติ)
c = np.array([ [["000","001"],["010","011"],["020","021"]] , [["100","101"],["110","111"],["120","121"]]])

[ [['000', '001'],
    ['010', '011'],
    ['020', '021']],

   [['100', '101'],
    ['110', '111'],
    ['120', '121']] ]

จะกลายเป็นว่า มิติที่ 3 กลายเป็นหลักแรกสุด ตามมาด้วยแถวและหลัก นั่นคือ
c[0,0,1] จะได้ค่า 001
และ

c[0, :, :]
[['000', '001'],
 ['010', '011'],
 ['020', '021']]

นอกจากนี้แล้ว ยังสามารถใช้เครื่องหมาย ... แทนทุกมิติที่ไม่ได้ระบุไว้ เช่น
c[0,...] ก็จะได้ผลลัพธ์เหมือน c[0,:,:]

No comments:

Post a Comment