11: NumPy

11-5: Broadcasting

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

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

จงเขียนฟังก์ชัน translate(P, d) ซึ่งรับ P เป็นอาเรย์สองมิติขนาด nx2 และรับ d เป็นอาเรย์หนึ่งมิติสองช่อง ฟังก์ชันนี้สร้างและคืนอาเรย์สองมิติ Q ที่มีขนาดเดียวกับ P โดยที่ Qk,0 = Pk,0 + d0 และ Qk,1 = Pk,1 + d1 สำหรับทุกแถวที่ k ของ P (ไม่ต้องใช้คำสั่งวงวนใด ๆ)

import numpy as np def translate(P, d): import numpy as np def translate(P, d): return P + d import numpy as np q = "`" fname = "translate" arg1 = 'np.array(' + str([[np.random.randint(0,20) for k in range(2)] for j in range(10)]) + ', float)' arg2 = 'np.array([1.5, 2.5])' 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 นะ") fcall = fname + "(" + arg1 + ", " + arg2 + ")" func.check_call(fcall).has_equal_value(incorrect_msg=(q+fname+q) + " ให้ผลผิด")
แบบฝึกหัด 11-5 ข้อที่ 2

จงเขียนฟังก์ชัน translate(P, d) ซึ่งรับ P เป็นอาเรย์สองมิติขนาด 2xn และรับ d เป็นอาเรย์หนึ่งมิติสองช่อง ฟังก์ชันนี้สร้างและคืนอาเรย์สองมิติ Q ที่มีขนาดเดียวกับ P โดยที่ Q0,k = P0,k + d0 และ Q1,k = P1,k + d1 สำหรับทุกคอลัมน์ที่ k ของ P (ไม่ต้องใช้คำสั่งวงวนใด ๆ)

import numpy as np def translate(P, d): import numpy as np def translate(P, d): return P + d.reshape((len(d),1)) import numpy as np q = "`" fname = "translate" arg1 = 'np.array(' + str([[np.random.randint(0,20) for k in range(10)] for j in range(2)]) + ', float)' arg2 = 'np.array([1.5, 2.5])' 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 นะ") fcall = fname + "(" + arg1 + ", " + arg2 + ")" func.check_call(fcall).has_equal_value(incorrect_msg=(q+fname+q) + " ให้ผลผิด")
แบบฝึกหัด 11-5 ข้อที่ 3

จงเขียนคำสั่งเพื่อสร้างอาเรย์ A ที่มีขนาดและค่าภายในเป็นดังรูป โดยใช้ broadcasting (ไม่ต้องใช้คำสั่งวงวน)

import numpy as np A = np.ndarray((10,5), int) A[:] = np.arange(1,6) import numpy as np v = "A" Ex().check_not(has_code(r"(for|while)"), msg="ไม่ใช้ for หรือ while นะ") 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 + "` ต้องเก็บจำนวนเต็ม") obj.has_equal_value(incorrect_msg = "`" + v + "` มีค่าไม่ตรงตามโจทย์")
แบบฝึกหัด 11-5 ข้อที่ 4

จงเขียนคำสั่งเพื่อสร้างอาเรย์ A ที่มีขนาดและค่าภายในเป็นดังรูป โดยใช้ broadcasting (ไม่ต้องใช้คำสั่งวงวน)

import numpy as np A = np.ndarray((9,5), int) A[:,:] = np.arange(1,10).reshape(9,1) import numpy as np v = "A" Ex().check_not(has_code(r"(for|while)"), msg="ไม่ใช้ for หรือ while นะ") 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 + "` ต้องเก็บจำนวนเต็ม") obj.has_equal_value(incorrect_msg = "`" + v + "` มีค่าไม่ตรงตามโจทย์")
แบบฝึกหัด 11-5 ข้อที่ 5

จงเขียนคำสั่งเพื่อสร้างอาเรย์ A ที่มีขนาดและค่าภายในเป็นดังรูป โดยใช้ broadcasting (ไม่ต้องใช้คำสั่งวงวน)

import numpy as np X = np.arange(0,8) XT = X.reshape((8,1)) A = X + XT import numpy as np v = "A" Ex().check_not(has_code(r"(for|while)"), msg="ไม่ใช้ for หรือ while นะ") 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 + "` ต้องเก็บจำนวนเต็ม") obj.has_equal_value(incorrect_msg = "`" + v + "` มีค่าไม่ตรงตามโจทย์")
แบบฝึกหัด 11-5 ข้อที่ 6

จงเขียนฟังก์ชัน upper_tri_true(n) ที่รับจำนวนเต็ม n เพื่อสร้างและคืนอาเรย์สองมิติขนาด nxn ที่เก็บค่า True ในช่องที่มีเลขแถวไม่มากกว่าเลขคอลัมน์ นอกนั้นเป็น False หมด เช่น upper_tri_true(7) จะได้อาเรย์ดังรูป ในรูปแสดงค่า True และ False ด้วย T และ F ตามลำดับ (ไม่ต้องใช้คำสั่งวงวน)

import numpy as np def upper_tri_true(n): import numpy as np def upper_tri_true(n): a = np.arange(n) at = a.reshape((n,1)) return at <= a import numpy as np q = "`" fname = "upper_tri_true" arg1 = str(np.random.randint(5, 10)) 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 นะ") fcall = fname + "(" + arg1 + ")" func.check_call(fcall).has_equal_value(incorrect_msg=(q+fname+q) + " ให้ผลผิด")