เมทริกซ์มากเลขศูนย์

ในสาขาการวิเคราะห์เชิงตัวเลข และ วิทยาการคอมพิวเตอร์ เมทริกซ์มากเลขศูนย์[1] (แม่แบบ:Langx) หรือ แถวลำดับมากเลขศูนย์ (แม่แบบ:Langx) หมายถึงเมทริกซ์ที่องค์ประกอบส่วนใหญ่เป็นศูนย์[2] ไม่มีคำจำกัดความที่แน่ชัดว่าต้องมีองค์ประกอบที่เป็นศูนย์อยู่มากเท่าไดจึงจะถือว่าเป็นเมทริกซ์ที่ มากเลขศูนย์ (sparse) แต่เงื่อนไขโดยทั่วไปคือจำนวนองค์ประกอบที่ไม่ใช่ศูนย์นั้นใกล้เคียงกับจำนวนแถวหรือสดมภ์โดยประมาณ ในทางกลับกัน เมทริกซ์ที่องค์ประกอบส่วนใหญ่ไม่เป็นศูนย์จะถือว่าเป็นเมทริกซ์ที่ หนาแน่น (dense)[2] จำนวนองค์ประกอบที่เป็นศูนย์ในเมทริกซ์หารด้วยจำนวนองค์ประกอบทั้งหมด บางครั้งเรียกว่า ความมากเลขศูนย์ (sparsity) ของเมทริกซ์
ตามหลักการแล้ว ความมากเลขศูนย์จะเกิดขึ้นกับระบบที่มีการโต้ตอบแบบคู่กันเพียงเล็กน้อย ตัวอย่างเช่น ถ้าเราพิจารณาเส้นของลูกบอลที่เชื่อมต่อถึงกันด้วยสปริง นี่เป็นระบบแบบมากเลขศูนย์ เนื่องจากลูกบอลแต่ละลูกจะจับคู่กับตัวข้าง ๆ เท่านั้น ในทางตรงข้าม ระบบนี้จะเป็นเมทริกซ์หนาแน่น หากลูกบอลลูกหนึ่งเชื่อมต่อกันด้วยสปริงกับลูกบอลอีกลูกที่อยู่ในแนวเดียวกัน แนวคิดเรื่องความมากเลขศูนย์มีประโยชน์ในด้านการใช้งาน เช่น คณิตศาสตร์เชิงการจัด และ ทฤษฎีโครงข่าย และ การวิเคราะห์เชิงตัวเลข ซึ่งโดยปกติแล้วความหนาแน่นของข้อมูลสำคัญและการเชื่อมต่อจะต่ำ เมทริกซ์มากเลขศูนย์ขนาดใหญ่มักปรากฏในการประยุกต์ใช้ทางวิทยาศาสตร์ และ วิศวกรรมศาสตร์ เมื่อแก้สมการเชิงอนุพันธ์ย่อย
เมื่อจัดเก็บและจัดการเมทริกซ์แบบมากเลขศูนย์บนคอมพิวเตอร์ จะเป็นประโยชน์และมักจำเป็นต้องใช้ ขั้นตอนวิธีพิเศษและโครงสร้างข้อมูลที่ใช้ประโยชน์จากโครงสร้างแบบมากเลขศูนย์ของเมทริกซ์ เนื่องจากเมทริกซ์มากเลขศูนย์มักใช้ในด้านการเรียนรู้ของเครื่อง [3] บางเครื่องจึงอาจถูกสร้างขึ้นมาสำหรับเมทริกซ์แบบนี้โดยเฉพาะ[4] การดำเนินการที่ใช้โครงสร้างเมทริกซ์หนาแน่นมาตรฐานจะช้าและไม่มีประสิทธิภาพเมื่อนำไปใช้กับเมทริกซ์มากเลขศูนย์ขนาดใหญ่ การสูญเสียการประมวลผลและหน่วยความจำไปกับค่าศูนย์ ข้อมูลมากเลขศูนย์จะบีบอัดได้ง่ายกว่าดังนั้นจึงใช้พื้นที่จัดเก็บน้อยกว่ามาก สำหรับเมทริกซ์มากเลขศูนย์ที่มีขนาดใหญ่มาก อาจเป็นไปได้ที่จะใช้การดำเนินการกับเมทริกซ์หนาแน่นมาตรฐาน
สมการเชิงอนุพันธ์ย่อยอรจถูกวิเคราะห์ได้โดยใช้ วิธีผลต่างอันตะ วิธีไฟไนต์เอลิเมนต์ ฯลฯ โดยทั่วไปจะกลายเป็น ระบบสมการเชิงเส้นที่มีเมทริกซ์มากเลขศูนย์ เป็นเมทริกซ์สัมประสิทธิ์
ในสาขาการวิเคราะห์เชิงตัวเลข มีวิธีการแก้ปัญหาหลายวิธีที่ใช้เมทริกซ์มากเลขศูนย์ การจัดเก็บเฉพาะองค์ประกอบที่ไม่ใช่ศูนย์ของเมทริกซ์มากเลขศูนย์อย่างชาญฉลาด จะช่วยให้จัดการกับปัญหามิติขนาดใหญ่ได้ง่ายขึ้น ข้อดีอีกประการหนึ่งคือ ตัวอย่างเช่น สามารถคำนวณผลคูณของเวกเตอร์และเมทริกซ์ได้โดยใช้ความพยายามเพียงเล็กน้อย ตัวประมวลผลเวกเตอร์นั้นใช้ได้ดีในการประมวลผลทางคอมพิวเตอร์โดยใช้เมทริกซ์มากเลขศูนย์ซึ่งมักจะเกี่ยวข้องกับการเข้าถึงหน่วยความจำแบบสุ่ม และยังคงเป็นกระบวนการที่ตัวประมวลผลแบบสเกลาร์ ทั่วไปและ GPGPU นั้นยังทำได้ไม่ค่อยดี[5]
รูปแบบการจัดเก็บข้อมูล
โดยทั่วไปเมทริกซ์จะถูกเก็บไว้ในแถวลำดับสองมิติ แต่ละองค์ประกอบของแถวลำดับแสดงถึงองค์ประกอบ แม่แบบ:Math ของเมทริกซ์ และเข้าถึงได้โดยใช้ดัชนี สองตัว แม่แบบ:Math และ แม่แบบ:Math ตามแบบแผนทั่วไป แม่แบบ:Math หมายถึงดัชนีแถวโดยนับจากบนลงล่าง และ แม่แบบ:Math หมายถึงดัชนีสดมภ์โดยนับจากซ้ายไปขวา สำหรับเมทริกซ์ขนาด แม่แบบ:Math จำนวนหน่วยความจำที่ต้องใช้ในการจัดเก็บเมทริกซ์ในรูปแบบนี้เป็นสัดส่วนกับ แม่แบบ:Math (แม้ว่าจะมักลืมไปว่าขนาดของเมทริกซ์ก็ต้องถูกจัดเก็บด้วย)
ในกรณีของเมทริกซ์มากเลขศูนย์ การจัดเก็บเฉพาะองค์ประกอบที่ไม่เป็นศูนย์จะช่วยลดจำนวนหน่วยความจำที่ต้องการได้อย่างมาก การใช้โครงสร้างข้อมูลที่แตกต่างกันขึ้นอยู่กับจำนวนและการกระจายขององค์ประกอบที่ไม่ใช่ศูนย์ ช่วยให้ประหยัดหน่วยความจำได้มากเมื่อเทียบกับวิธีการพื้นฐาน ข้อเสียคือการเข้าถึงแต่ละองค์ประกอบนั้นซับซ้อนกว่า และจำเป็นต้องมีโครงสร้างเพิ่มเติมเพื่อให้สามารถกู้คืนเมทริกซ์ดั้งเดิมได้อย่างชัดเจน
ด้วยเหตุนี้ จึงมีรูปแบบไฟล์แบบต่าง ๆ สำหรับจัดเก็บเมทริกซ์มากเลขศูนย์
รูปแบบจะแบ่งออกเป็นสองกลุ่ม
- รูปแบบที่รองรับการแก้ไขอย่างมีประสิทธิภาพ
- DOK (พจนานุกรมคีย์)
- LIL (รายการ)
- COO
- รูปแบบที่รองรับการเข้าถึงที่มีประสิทธิภาพและการจัดการเมทริกซ์
- CSR
- CSC
- BSR
ชื่อต่อไปนี้เป็นไปตามที่ใช้ใน Netlib[6], Intel Math Kernel Library[7] และ SciPy ให้พิจารณาเมทริกซ์มากเลขศูนย์ A ต่อไปนี้เป็นตัวอย่าง
พจนานุกรมคีย์
พจนานุกรมคีย์ (Dictionary of Key, DOK) เป็นวิธีการที่ใช้ (แถว, สดมภ์) เป็นคีย์และจัดเก็บไว้ในแถวลำดับแบบจับคู่
รายการของรายการ
รายการของรายการ (list of list, LIL) เป็นวิธีการที่สร้างรายการสำหรับแต่ละแถวและจัดเก็บสิ่งอันดับ (สดมภ์, ค่า) ในรายการนั้น
พิกัด
พิกัด (coordinate, COO) เป็นวิธีการแสดงเมทริกซ์เป็นชุดของหลายสิ่งอันดับ [ค่า, ดัชนีแถว, ดัชนีสดมภ์][8]
การจัดเรียงองค์ประกอบของเมทริกซ์ A พร้อมกับพิกัด (ดัชนี) จะให้ผลลัพธ์ดังนี้
A = [1 2 3 0 0 0 0 1 2 0 0 2 0 0 0 1] # ค่า IA = [1 1 1 1 1 2 2 2 2 3 3 3 3 4 4 4 4] # ดัชนีแถว JA = [1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4] # ดัชนีสดมภ์
ในที่นี้หากระบุว่า "ค่าที่ไม่มีอยู่จะถือเป็นองค์ประกอบศูนย์" องค์ประกอบที่เป็นศูนย์ทั้งหมดสามารถลบทิ้ง ซึ่งส่งผลให้ได้
A = [1 2 3 1 2 2 1] # ค่า IA = [1 1 1 2 3 3 4] # ดัชนีแถว JA = [1 2 3 4 1 4 4] # ดัชนีสดมภ์
เป็นการแทนด้วยเมทริกซ์มากเลขศูนย์ A ในรูปแบบ COO
หากต้องการแก้ไของค์ประกอบที่เป็นศูนย์ของเมทริกซ์ COO ให้ไม่เป็นศูนย์ ก็แค่ต้องเพิ่มหลายสิ่งอันดับที่ไม่เป็นศูนย์หลังจากนั้นเท่านั้น ซึ่งเป็นวิธีที่มีประสิทธิภาพ
ที่เก็บข้อมูลแถวบีบอัด
ที่เก็บข้อมูลแถวที่ถูกบีบอัด (compressed row storage, CRS) หรือ แถวมากเลขศูนย์บีบอัด (compressed sparse row, CSR) เป็นวิธีการบีบอัดแถวลำดับดัชนีแถว[9]
ในวิธี CSR ขั้นแรกให้จัดเรียงเมทริกซ์สองมิติตามทิศทางของแถว ต่อไปจะพิจารณาว่า "ค่าที่ไม่มีอยู่จะถือเป็นองค์ประกอบศูนย์" และองค์ประกอบที่เป็นศูนย์ทั้งหมดจะถูกลบทิ้ง ในขั้นตอนนี้ หากจัดเรียงดัชนีด้วยแถวและสดมภ์ จะมีลักษณะดังนี้:
data = [1 2 3 1 2 2 1] # ค่า IA = [1 1 1 2 3 3 4] # ดัชนีแถว JA = [1 2 3 4 1 4 4] # ดัชนีสดมภ์
ในที่นี้เราจะมุ่งความสนใจไปที่แถวลำดับดัชนีแถว (IA) ในปัจจุบัน แต่ละองค์ประกอบมีดัชนีแถวที่ชัดเจน แต่สามารถรับมาได้โดยอัตโนมัติหากทราบการแบ่งแถว ตัวอย่างเช่น IA[1] = IA[2] = IA[3] = 1 แต่ถ้ารู้ว่า "บรรทัดแรกเริ่มจากองค์ประกอบแรก และบรรทัดที่ 2 เริ่มจากองค์ประกอบที่ 4" ดังนั้นจะได้ว่า IA[1:4]=[1 1 1] ในทันที นี่เป็นผลมาจากกฎที่ว่าวิธี CSR จัดเรียงทีละแถวแล้วลบองค์ประกอบที่เป็นศูนย์
การแสดงดัชนีแถวนี้สามารถมองได้ว่าเป็นแถวลำดับของตัวชี้ส่วนหัวของแถว นั่นคือ indptr = [ptr_row_1 ptr_row2 ...] ขณะนี้แถวลำดับดัชนีสดมภ์ JA เป็นเพียงแถวลำดับเดียวที่ระบุดัชนีโดยตรง ดังนั้นจะเปลี่ยนชื่อเป็น indices[10] ซึ่งจะได้ว่า
data = [1 2 3 1 2 2 1] # ค่า indices = [1 2 3 4 1 4 4] # ดัชนีสดมภ์ indptr = [1 4 5 7] # ตัวชี้แถว
นี่เป็นการแสดงเมทริกซ์มากเลขศูนย์ A ในรูปแบบ CSR
รูปแบบ CSR ช่วยให้เข้าถึงแถวได้ดีขึ้น[11] เมื่อเข้าถึงแถวแรกสามารถดึงเอาข้อมูลโดย data[indptr[1]:indptr[2]] และดัชนีสดมภ์ที่มี indices[indptr[1]:indptr[2]] (ดัชนีแถวคือ 1 แน่นอน)[12] ในขณะที่ ในรูปแบบ COO ขั้นแรกจะกวาดดูความยาวทั้งหมดของแถวลำดับดัชนีแถว IA แสดงรายการหมายเลของค์ประกอบ k ที่สอดคล้องกับ IA[k] == 1 จากนั้นจะต้องทำการเข้าถึง k ทั้งหมดโดยใช้ data[k], indices[k]
ในทางตรงกันข้าม รูปแบบ CSR ทำให้เข้าถึงสดมภ์ได้ไม่ดี[13] เมื่อต้องการเข้าถึงสดมภ์แรก ต้องกวาดหา indices ตามความยาวทั้งหมด และแสดงรายการหมายเลของค์ประกอบ k ที่ indices[k] == 1 จากนั้นกวาดหา indptr เพื่อให้ได้ดัชนีแถว และต้องค้นหา n ที่ทำให้ indptr[n] <= k < indptr[n+1] ที่แต่ละ k
ที่เก็บข้อมูลสดมภ์บีบอัด
ที่เก็บข้อมูลสดมภ์บีบอัด (compressed column storage, CCS) หรือ สดมภ์มากเลขศูนย์บีบอัด (compressed sparse Column, CSC) จะเหมือนกับ CRS แต่อิงสดมภ์แทนที่จะอิงแถว[14]
ที่เก็บข้อมูลแนวทแยงบีบอัด
ที่เก็บข้อมูลแนวทแยงบีบอัด (compressed diagonal storage, CDS) และ diagonal (DIA) เป็นรูปแบบ CRS/CSR ในหน่วยเมทริกซ์แนวทแยง
เมทริกซ์เส้นขอบฟ้า (SKS, SKY)
แม่แบบ:หลัก เมทริกซ์เส้นขอบฟ้า (skyline matrix) ใช้สำหรับเมทริกซ์สามเหลี่ยม
ที่จัดเก็บแถวบีบอัดแบบบล็อก
ที่จัดเก็บแถวบีบอัดแบบบล็อก (block compressed row storage, BCRS) หรือ แถวมากเลขศูนย์แบบบล็อก (Block Sparse Row, BSR) เหมือนกับ CRS แต่ทำเป็นในหน่วยบล็อก[15]
อ้างอิง
- ↑ แม่แบบ:Cite web
- ↑ 2.0 2.1 แม่แบบ:Cite conference
- ↑ แม่แบบ:Cite press release
- ↑ แม่แบบ:Cite web
- ↑ แม่แบบ:Cite web
- ↑ Survey of Sparse Matrix Storage Formats
- ↑ Intel® MKL Sparse BLAS Overview | Intel® Developer Zone
- ↑ "scipy.sparse.coo_matrix ... A sparse matrix in COOrdinate format." scipy.sparse.coo_matrix. scipy. 2022-03-05閲覧.
- ↑ "scipy.sparse.csr_matrix ... Compressed Sparse Row matrix" scipy.sparse.csr_matrix. scipy. 2022-03-05閲覧.
- ↑ "csr_matrix((data, indices, indptr) ... is the standard CSR representation where the column indices for row i are stored in
indices[indptr[i]:indptr[i+1]]and their corresponding values are stored indata[indptr[i]:indptr[i+1]]." scipy.sparse.csr_matrix. scipy. 2022-03-05閲覧. - ↑ "Advantages of the CSR format ... efficient row slicing" scipy.sparse.csr_matrix. scipy. 2022-03-05閲覧.
- ↑ "csr_matrix((data, indices, indptr) ... is the standard CSR representation where the column indices for row i are stored in
indices[indptr[i]:indptr[i+1]]and their corresponding values are stored indata[indptr[i]:indptr[i+1]]." scipy.sparse.csr_matrix. scipy. 2022-03-05閲覧. - ↑ "Disadvantages of the CSR format slow column slicing operations" scipy.sparse.csr_matrix. scipy. 2022-03-05閲覧.
- ↑ "scipy.sparse.csc_matrix ... Compressed Sparse Column matrix" scipy.sparse.csc_matrix. scipy. 2022-03-05閲覧.
- ↑ "scipy.sparse.bsr_matrix ... Block Sparse Row matrix" scipy.sparse.bsr_matrix. 2022-03-05閲覧.