11: NumPy

11-1: Array Creation and Reshaping

** ถ้าใช้งานบนมือถือหรือ tablet แนะนำให้ใช้ Chrome หรือ Safari เท่านั้น **

แบบฝึกหัด 11-1 ข้อที่ 1

เขียนคำสั่งเพื่อสร้างอาเรย์ในตัวแปรชื่อต่อไปนี้ (ไม่ต้องใช้คำสั่งวงวน)

  • a0 อ่านรายการของจำนวนเต็มจากอินพุตหนึ่งบรรทัด (คั่นด้วยช่องว่าง) มาสร้างอาเรย์หนึ่งมิตื
  • a1 ขนาด 3x4 ทุกช่องมีค่า 0.0
  • a2 ขนาด 4x2 ทุกช่องมีค่า 1
  • a3 ขนาด 4 ช่อง เก็บค่า 2, 13 ,4 , 9
  • a4 ขนาด 1x4 ช่อง เก็บค่า 2, 13, 4, 9
  • a5 ขนาด 100 ช่อง เก็บค่า 1.00, 1.01, 1.02, ...,1.99
  • a6 แทนเมทริกซ์เอกลักษณ์ขนาด 10x10
  • a7 ขนาด 10x7 เก็บ float ไม่ต้องตั้งค่าเริ่มต้น

___inp___ = ['1 3 2 4 1 3 4'] def input(): t = ___inp___.pop(0) ___inp___.append(t) return t import numpy as np import numpy as np a0 = np.array(input().split(), dtype=int) a1 = np.zeros((3,4), float) a2 = np.ones((4,2), int) a3 = np.array([2,13,4,9]) a4 = np.array([[2,13,4,9]]) a5 = np.arange(1.00, 2.00, 0.01) a6 = np.identity(10) a7 = np.ndarray((10,7), float) Ex().check_not(has_code(r"(for|while)"), msg="ไม่ใช้ for หรือ while นะ") vars = ['a0', 'a1', 'a2', 'a3', 'a4', 'a5', 'a6', 'a7'] for v in vars: obj = Ex().check_object(v, missing_msg = "ไม่มีตัวแปร `" + v + "`") obj.has_equal_value(expr_code = "type("+v+")", incorrect_msg = "`" + v + "` ต้องเป็น numpy array") obj.has_equal_value(expr_code = v+".dtype", incorrect_msg = "`" + v + "` เก็บข้อมูลที่มีประเภทข้อมูลไม่ตรงตามโจทย์") if v != 'a7': obj.has_equal_value(incorrect_msg = "`" + v + "` มีค่าไม่ตรงตามโจทย์") else: obj.has_equal_value(expr_code = "a7.shape", incorrect_msg = "`" + v + "` มีขนาดไม่ตรงตามโจทย์")
แบบฝึกหัด 11-1 ข้อที่ 2

จงเขียนฟังก์ชัน number_of_rows(M) และ number_of_cols(M) ที่รับเมทริกซ์ M และคืนจำนวนแถว กับจำนวนคอลัมน์ของ M ตามลำดับ

import numpy as np import numpy as np def number_of_rows(M): def number_of_cols(M): import numpy as np def number_of_rows(M): return M.shape[0] def number_of_cols(M): return M.shape[1] import numpy as np def to_str(M): return "np.array(" + repr(M.tolist()) + ")" q = "`" for fname in ["number_of_rows", "number_of_cols"]: func = Ex().check_function_def(fname, missing_msg="ไม่พบฟังก์ชัน " + (q+fname+q)) func.has_equal_part_len('args', 'ฟังก์ชันนี้รับพารามิเตอร์หนึ่งตัว') for i in range(2): r,c = np.random.randint(3,6), np.random.randint(3,6) M = to_str(np.ones((r,c),int)) fcall = fname + "(" + M + ")" func.check_call(fcall).has_equal_value(incorrect_msg=(q+fname+q) + " ให้ผลผิด")
แบบฝึกหัด 11-1 ข้อที่ 3

ถ้า A เป็นอาเรย์มิติเดียว เช่น A = np.array([1,2,3]) จะได้ A.T เหมือนกับ A โจทย์ข้อนี้จึงต้องการให้เขียนฟังก์ชัน transpose(A) ที่รับ A เป็นอาเรย์มิติเดียว แล้วคืนอาเรย์เหมือนกับเป็นทรานโพสของ A เช่น transpose(np.array([1,2,3]) จะได้ np.array([[1],[2],[3]]) (หมายเหตุ: ไม่ต้องใช้วงวน)

import numpy as np import numpy as np def transpose(A): import numpy as np def transpose(A): return A.reshape((A.shape[0], 1)) import numpy as np def to_str(A): return "np.array(" + repr(A.tolist()) + ")" q = "`" fname = "transpose" func = Ex().check_function_def(fname, missing_msg="ไม่พบฟังก์ชัน " + (q+fname+q)) func.has_equal_part_len('args', 'ฟังก์ชันนี้รับพารามิเตอร์หนึ่งตัว') func.check_not(has_code(r"(for|while)"), msg="ไม่ใช้ for หรือ while นะ") A = to_str(np.random.randint(16, size=6)) fcall = fname + "(" + A + ")" func.check_call(fcall).has_equal_value(incorrect_msg=(q+fname+q) + " ให้ผลผิด")
ใช้ reshape
แบบฝึกหัด 11-1 ข้อที่ 4

จงเขียนคำสั่งสร้างอาเรย์ชื่อ a มีขนาด 20x10 เก็บจำนวนเต็ม โดย a[k] มีค่า [10k, 10k+1, 10k+2, ..., 10k+9] (หมายเหตุ: ไม่ต้องใช้วงวน)

import numpy as np a = np.arange(0,200).reshape((20,10)) v = "a" obj = Ex().check_object(v, missing_msg = "ไม่มีตัวแปร `" + v + "`") obj.has_equal_value(expr_code = "type("+v+")", incorrect_msg = "`" + v + "` ต้องเป็น numpy array") obj.has_equal_value(expr_code = v+".dtype", incorrect_msg = "`" + v + "` เก็บ int") obj.has_equal_value(incorrect_msg = "`" + v + "` มีค่าไม่ตรงตามโจทย์") Ex().check_not(has_code(r"(for|while)"), msg="ไม่ใช้ for หรือ while นะ")