อินพุตเป็นข้อมูลบรรยายเมทริกซ์ บรรทัดแรกมีจำนวนเต็มสองจำนวน คือ จำนวนแถว (r) กับจำนวนคอลัมน์ (c) ของเมทริกซ์ ตามด้วยอีก r บรรทัด แต่ละบรรทัดประกอบด้วยจำนวนเต็ม c จำนวน (ทุก ๆ จำนวนคั่นด้วยช่องว่าง) จงเขียนคำสั่งอ่านข้อมูลจากอินพุตมาสร้างอาเรย์สองมิติชื่อ A
import numpy as np
A = np.array(np.random.randint(0, 9, (8,10)), str)
___inp___ = ['8 10'] + [' '.join(A[i]) for i in range(len(A))]
def input():
t = ___inp___.pop(0)
___inp___.append(t)
return t
import numpy as np
import numpy as np
r,c = [int(e) for e in input().split()]
A = np.ndarray((r,c),int)
for i in range(A.shape[0]):
A[i] = np.array([int(e) for e in input().split()])
vars = ['A']
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 + "` เก็บข้อมูลที่มีประเภทข้อมูลไม่ตรงตามโจทย์")
obj.has_equal_value(incorrect_msg = "`" + v + "` มีค่าไม่ตรงตามโจทย์")
กำหนดให้มี A เป็นอาเรย์ 2 มิติ (มีจำนวนแถวและจำนวนคอลัมน์เป็นจำนวนคู่) จงเขียนคำสั่งเพื่อสร้างอาเรย์ใหม่ในตัวแปรชื่อต่อไปนี้ จากข้อมูลใน A (ไม่ใช้คำสั่งวงวน)
a0
เก็บข้อมูลตัวมุมขวาล่างสุดของ Aa1
เก็บข้อมูลทุกคอลัมน์ของแถวคู่ ของ Aa2
เก็บข้อมูลเฉพาะคอลัมน์คี่ของทุกแถว ของ Aa3
เก็บข้อมูลเฉพาะคอลัมน์คู่ของแถวบนสุดของ Aa4
เก็บข้อมูลแถวคี่เฉพาะคอลัมน์ที่อินเด็กซ์ 1 ของ Aa5
เก็บข้อมูลทุกตัวในจตุภาค (quadrant) ที่ 2 ของ A (เมื่อแบ่ง A เป็นสี่จตุภาคเท่า ๆ กัน)a6
เก็บข้อมูลทุกตัวในจตุภาค (quadrant) ที่ 4 ของ A (เมื่อแบ่ง A เป็นสี่จตุภาคเท่า ๆ กัน)a7
เก็บข้อมูลทุกคอลัมน์ในแถวเฉพาะแถวบนสุดกับแถวล่างสุด ของ Aa8
เก็บข้อมูลทุกแถวในคอลัมน์เฉพาะคอลัมน์ขวาสุดและซ้ายสุด ของ Aa9
เก็บข้อมูลทุกแถวของ A ยกเว้นแถวอินเด็กซ์ 4
import numpy as np
A = np.random.randint(0,9,(8,10))
import numpy as np
import numpy as np
r,c = A.shape
a0 = A[-1, -1]
a1 = A[::2]
a2 = A[:, 1::2]
a3 = A[0, ::2]
a4 = A[1::2, 1]
a5 = A[:r//2, :c//2]
a6 = A[r//2:, c//2:]
a7 = A[[0,r-1]]
a8 = A[:,[-1,0]]
a9 = A[list(range(0,4))+list(range(5,r))]
Ex().check_not(has_code(r"(for|while)"), msg="ไม่ใช้ for หรือ while นะ")
vars = ['a0', 'a1', 'a2', 'a3', 'a4', 'a5', 'a6', 'a7', 'a8', 'a9']
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 + "` เก็บข้อมูลที่มีประเภทข้อมูลไม่ตรงตามโจทย์")
msg = ""
if v == 'a8':
msg = " โจทย์ให้นำคอลัมน์ขวาสุดมาก่อน แล้วค่อยตามด้วยคอลัมน์ซ้ายสุด"
obj.has_equal_value(incorrect_msg = "`" + v + "` มีค่าไม่ตรงตามโจทย์" + msg)
จงเขียนฟังก์ชัน submatrix(M, i, j)
ที่รับเมทริกซ์ M
และ จำนวนเต็ม i
กับ j
ฟังก์ชันนี้คืนเมทริกซ์ย่อยใน M ที่ไม่รวมแถวที่ i ทั้งแถว และไม่รวมคอลัมน์ที่ j ทั้งคอลัมน์ของ M (ไม่ต้องใช้คำสั่งวงวน) เช่น submatrix(np.array([[1,2,3,4],[5,6,7,8],[4,3,2,1],[8,7,6,5]]), 1, 2)
จะได้ np.array([[1,2,4], [4,3,1], [8,7,5]])
import numpy as np
def submatrix(M, i, j):
import numpy as np
def submatrix(M, i, j):
R = list(range(M.shape[0]))
C = list(range(M.shape[1]))
return M[R[:i]+R[i+1:]][:, C[:j]+C[j+1:]]
import numpy as np
q = "`"
fname = "submatrix"
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 นะ")
arg1 = 'np.array(' + str(np.random.randint(0,9,(10,10)).tolist()) + ')'
for i,j in [(0,0), (9,9), (0,9), (9,0), (1,8), (8,1)]:
fcall = fname + "(" + arg1 + "," + str(i) + ',' + str(j) + ")"
func.check_call(fcall).has_equal_value(incorrect_msg=(q+fname+q) + " ให้ผลผิด")