คำถามติดแท็ก sparse-matrix

คำถามที่เกี่ยวข้องกับการจัดเก็บการประกอบการดำเนินการและด้านอื่น ๆ ของการจัดการกับเมทริกซ์แบบกระจัดกระจายซึ่งจัดเก็บเฉพาะองค์ประกอบที่ไม่ใช่ศูนย์เท่านั้น คำถามที่ไม่เกี่ยวกับเมทริกซ์แบบกระจัดกระจายโดยตรง แต่วิธีอื่น ๆ ในการใช้ sparsity ควรติดแท็กด้วย [sparse-operator]

17
มีตัวแก้ปัญหาการเขียนโปรแกรมแบบไม่เชิงเส้นคุณภาพสูงสำหรับ Python หรือไม่?
ฉันมีปัญหาการเพิ่มประสิทธิภาพทั่วโลกที่ไม่ท้าทายเพื่อแก้ปัญหา ปัจจุบันผมใช้กล่องเครื่องมือเพิ่มประสิทธิภาพของ MATLAB (โดยเฉพาะfmincon()กับอัลกอริทึม = 'sqp') ซึ่งมีประสิทธิภาพมาก อย่างไรก็ตามรหัสของฉันส่วนใหญ่อยู่ใน Python และฉันก็ชอบที่จะเพิ่มประสิทธิภาพใน Python ด้วยเช่นกัน มีตัวแก้ NLP ที่มีการผูก Python ที่สามารถแข่งขันได้fmincon()หรือไม่ มันจะต้อง สามารถรับมือกับความไม่เสมอภาคและความไม่เท่าเทียมกันได้ ไม่ต้องการให้ผู้ใช้จัดหายาโคบ ไม่เป็นไรหากไม่รับประกันว่าจะมีประสิทธิภาพระดับโลก ( fmincon()ไม่) fmincon()ฉันกำลังมองหาบางสิ่งบางอย่างที่ทนทานลู่ไปยังท้องถิ่นที่เหมาะสมแม้สำหรับความท้าทายปัญหาและแม้ว่ามันจะช้ากว่าเล็กน้อย ฉันได้พยายามแก้หลายที่ให้บริการผ่าน OpenOpt และพบว่าพวกเขาจะด้อยกว่าของ fmincon/sqpMATLAB เพียงเพื่อเน้นฉันมีสูตรเวิ้งว้างและแก้ปัญหาที่ดี เป้าหมายของฉันคือการเปลี่ยนภาษาเพื่อให้เวิร์กโฟลว์มีความคล่องตัวมากขึ้น เจฟฟ์ชี้ให้เห็นว่าคุณลักษณะบางอย่างของปัญหาอาจเกี่ยวข้องกัน พวกเขาคือ: 10-400 ตัวแปรการตัดสินใจ 4-100 ข้อ จำกัด ความเท่าเทียมกันของพหุนาม (ดีกรีพหุนามมีช่วงตั้งแต่ 1 ถึงประมาณ 8) จำนวนข้อ จำกัด ของความไม่เท่าเทียมกันที่มีเหตุผลเท่ากับจำนวนตัวแปรการตัดสินใจประมาณสองเท่า ฟังก์ชั่นวัตถุประสงค์เป็นหนึ่งในตัวแปรการตัดสินใจ ชาวจาโคเบียนแห่งข้อ จำกัด ความเท่าเทียมมีความหนาแน่นสูงเช่นเดียวกับชาวจาโคเบียนแห่งข้อ จำกัด …

4
ฉันควรทำตามแนวทางใดเมื่อเลือกตัวแก้ระบบเชิงเส้นหร็อมแหร็ม?
ระบบเชิงเส้นแบบกระจัดกระจายมีความถี่เพิ่มขึ้นในแอปพลิเคชัน หนึ่งมีงานประจำมากมายให้เลือกสำหรับการแก้ปัญหาระบบเหล่านี้ ในระดับสูงสุดมีสันปันน้ำระหว่างทางโดยตรง (เช่นการกำจัดแบบเกาส์แบบเบาบางหรือการสลายตัวแบบโคลสลอสด้วยอัลกอริธึมการสั่งแบบพิเศษและวิธีการแบบหลายหน้า) และการวนซ้ำ (เช่น GMRES, (bi-) วิธีการหนึ่งกำหนดว่าจะใช้วิธีการโดยตรงหรือซ้ำ? เมื่อทำการเลือกแล้วหนึ่งจะเลือกอัลกอริทึมเฉพาะได้อย่างไร ฉันรู้แล้วเกี่ยวกับการเอารัดเอาเปรียบของสมมาตร (เช่นใช้การไล่ระดับสีแบบคอนจูเกตสำหรับระบบเชิงบวกแบบสมมาตรแบบเบาบาง) แต่มีข้อควรพิจารณาอื่น ๆ เช่นนี้เพื่อพิจารณาในการเลือกวิธีหรือไม่?

7
วิธีที่เร็วที่สุดในการคำนวณค่าลักษณะเฉพาะที่ใหญ่ที่สุดของเมทริกซ์ทั่วไปคืออะไร
แก้ไข:ฉันกำลังทดสอบว่าค่าลักษณะเฉพาะใดมีขนาดหนึ่งหรือมากกว่า ฉันต้องการหาค่าลักษณะเฉพาะสัมบูรณ์ที่ใหญ่ที่สุดของเมทริกซ์เบาบางขนาดใหญ่ที่ไม่สมมาตร ฉันใช้eigen()ฟังก์ชันของ R ซึ่งใช้ QR algo จาก EISPACK หรือ LAPACK เพื่อค้นหาค่าลักษณะเฉพาะทั้งหมดจากนั้นฉันใช้abs()เพื่อรับค่าสัมบูรณ์ อย่างไรก็ตามฉันต้องทำให้เร็วขึ้น ฉันได้ลองใช้อินเตอร์เฟส ARPACK ในigraphแพ็คเกจ R แล้ว อย่างไรก็ตามมันให้ข้อผิดพลาดสำหรับเมทริกซ์ตัวหนึ่งของฉัน การดำเนินการขั้นสุดท้ายจะต้องสามารถเข้าถึงได้จากอาร์ อาจมีค่าลักษณะเฉพาะหลายค่าที่มีขนาดเท่ากัน คุณมีข้อเสนอแนะใด? แก้ไข: ความแม่นยำจะต้องเป็น1e-11เท่านั้น เป็น "ปกติ" เมทริกซ์ได้รับเพื่อให้ห่างไกล 386 ฉันสามารถทำ QR factorisation กับมันได้ อย่างไรก็ตามมันเป็นไปได้ที่จะมีขนาดใหญ่กว่ามาก ฉันกำลังเริ่มอ่านเกี่ยวกับอัลกอริทึมของ Arnoldi ฉันเข้าใจว่ามันเกี่ยวข้องกับ Lanczsos386 × 386386×386386\times 386 EDIT2:ถ้าฉันมีเมทริกซ์หลายตัวที่ฉัน "ทดสอบ" และฉันรู้ว่ามันมีซับเมทริกซ์ขนาดใหญ่ที่ไม่เปลี่ยนแปลง เป็นไปได้ไหมที่จะเพิกเฉย / ทิ้ง?

3
การแก้
ฉันมีการฝึกอบรมและG Aกระจัดกระจายและn × nมีnมาก (สามารถเรียงตามลำดับได้หลายล้าน) Gคือเมทริกซ์สูงn × mมีmค่อนข้างเล็ก ( 1 < m < 1,000 ) และแต่ละคอลัมน์สามารถมีเพียงหนึ่งเดียว1รายการที่มีส่วนที่เหลือเป็น0 's เช่นว่าG T G =ฉัน Aมีขนาดใหญ่มากมันจึงยากที่จะกลับด้านและฉันสามารถแก้ปัญหาระบบเชิงเส้นเช่นAAAAGGGAAAn×nn×nn\times nnnnGGGn×mn×mn\times mmmm1<m<10001<m<10001 \lt m \lt 1000111000GTG=IGTG=IG^TG = IAAAAx=bAx=bAx = bซ้ำ ๆ กันโดยใช้วิธีการ subspace ของ Krylov เช่นBiCGStab(l)BiCGStab(l)\mathrm{BiCGStab}(l)แต่ฉันไม่มีA−1A−1A^{-1}อย่างชัดเจน ฉันต้องการแก้ระบบของรูปแบบ: (GTA−1G)x=b(GTA−1G)x=b(G^TA^{-1}G)x = bโดยที่xxxและbbbเป็นเวกเตอร์ความยาวmmmวิธีหนึ่งในการทำคือใช้อัลกอริธึมการวนซ้ำภายในอัลกอริทึมการวนซ้ำเพื่อแก้ปัญหาA−1A−1A^{-1}สำหรับการวนซ้ำของอัลกอริทึมการวนซ้ำรอบนอกแต่ละครั้ง อย่างไรก็ตามการคำนวณนี้มีราคาแพงมาก ฉันสงสัยว่ามีวิธีที่ง่ายกว่าในการแก้ปัญหานี้หรือไม่

3
ระยะทางแบบยุคลิดใน Octave
ฉันอยากรู้ว่ามีวิธีที่รวดเร็วในการคำนวณระยะทางแบบยุคลิดของเวกเตอร์สองตัวใน Octave หรือไม่ ดูเหมือนว่าไม่มีฟังก์ชั่นพิเศษสำหรับสิ่งนั้นดังนั้นฉันควรใช้สูตรด้วยsqrtหรือไม่

5
โทษประสิทธิภาพ 20% สำหรับการออกแบบซอฟต์แวร์ที่ดี
ฉันกำลังเขียนห้องสมุดขนาดเล็กสำหรับการคำนวณเมทริกซ์กระจัดกระจายเป็นวิธีการสอนตัวเองให้ใช้ประโยชน์จากการเขียนโปรแกรมเชิงวัตถุได้ดีที่สุด ฉันทำงานหนักมากในการสร้างแบบจำลองวัตถุที่ดีซึ่งชิ้นส่วน (เมทริกซ์กระจัดกระจายและกราฟที่อธิบายโครงสร้างการเชื่อมต่อของพวกเขา) เป็นคู่ที่หลวมมาก ในมุมมองของฉันเองรหัสนั้นสามารถขยายได้และสามารถบำรุงรักษาได้มากขึ้น อย่างไรก็ตามมันค่อนข้างช้ากว่าถ้าฉันใช้วิธีทู่ เพื่อทดสอบข้อเสียของการมีแบบจำลองวัตถุนี้ฉันเขียนชนิดเมทริกซ์กระจัดกระจายใหม่ซึ่งทำให้การห่อหุ้มของกราฟต้นแบบเพื่อดูว่าจะทำงานได้เร็วเท่าใด ตอนแรกมันดูเยือกเย็นมาก รหัสที่ฉันเคยภูมิใจที่รันช้ากว่ารุ่น 60% โดยไม่มีการออกแบบซอฟต์แวร์ที่หรูหรา แต่ฉันสามารถทำการเพิ่มประสิทธิภาพระดับต่ำได้ไม่กี่ครั้ง - การใส่ฟังก์ชั่นและเปลี่ยนลูปนิดหน่อยโดยไม่ต้องเปลี่ยน API เลย ด้วยการเปลี่ยนแปลงเหล่านี้ตอนนี้ช้ากว่าคู่แข่งเพียง 20% ซึ่งนำมาสู่คำถามของฉัน: ฉันควรยอมรับการสูญเสียประสิทธิภาพมากแค่ไหนถ้ามันหมายความว่าฉันมีโมเดลวัตถุที่ดี

5
วิธีที่ดีที่สุดในการกำหนดจำนวนของศูนย์ที่ไม่ใช่ในการคูณเมทริกซ์เบาบางคืออะไร?
ฉันสงสัยว่ามีวิธีที่รวดเร็วและมีประสิทธิภาพในการค้นหาจำนวนศูนย์ที่ไม่ใช่ล่วงหน้าสำหรับการดำเนินการคูณเมทริกซ์กระจัดกระจายสมมติว่าเมทริกซ์ทั้งสองอยู่ในรูปแบบ CSC หรือ CSR ฉันรู้ว่ามีหนึ่งในแพ็คเกจ smmp แต่ฉันต้องการสิ่งที่มีการใช้งานแล้วใน C หรือ C ++ ความช่วยเหลือใด ๆ ที่จะได้รับการชื่นชม. ขอบคุณล่วงหน้า.

4
จะจัดลำดับตัวแปรใหม่เพื่อสร้างเมทริกซ์แบนด์แบนด์วิดท์ขั้นต่ำได้อย่างไร
ฉันกำลังพยายามแก้สมการปัวซอง 2D ด้วยความแตกต่างอัน จำกัด ในกระบวนการฉันได้รับเมทริกซ์กระจัดกระจายที่มีเพียงตัวแปรในแต่ละสมการ ตัวอย่างเช่นถ้าตัวแปรเป็นUดังนั้นการแยกย่อยจะทำให้:555UยูU Ui−1,j+Ui+1,j−4Ui,j+Ui,j−1+Ui,j+1=fi,jUi−1,j+Ui+1,j−4Ui,j+Ui,j−1+Ui,j+1=fi,jU_{i-1,j} + U_{i+1,j} -4U_{i,j} + U_{i,j-1} + U_{i,j+1} = f_{i,j} ฉันรู้ว่าฉันสามารถแก้ปัญหาระบบนี้ได้โดยวิธีการวนซ้ำ แต่ความคิดนั้นเกิดขึ้นกับฉันว่าถ้าฉันสั่งตัวแปรอย่างเหมาะสมฉันอาจสามารถได้รับเมทริกซ์แถบสีซึ่งสามารถแก้ไขได้ด้วยวิธีโดยตรง (เช่นการกำจัดแบบเกาส์ w / o pivoting) เป็นไปได้ไหม มีกลยุทธ์ใดบ้างสำหรับการทำเช่นนี้กับคนอื่น ๆ ระบบที่กระจายน้อยลงหรือไม่?

1
เหตุใด SciPy eigsh () จึงสร้างค่าลักษณะเฉพาะที่ผิดพลาดในกรณีของ oscillator ที่มีค่าฮาร์มอนิก
ฉันกำลังพัฒนาโค้ดขนาดใหญ่ขึ้นเพื่อทำการคำนวณค่าไอคิวของเมทริกซ์กระจัดกระจายขนาดใหญ่ในบริบทของฟิสิกส์การคำนวณ ฉันทดสอบกิจวัตรของฉันกับออสซิลลาสฮาร์มอนิกง่ายๆในมิติเดียวเนื่องจากค่าลักษณะเฉพาะนั้นเป็นที่รู้จักกันดีในเชิงวิเคราะห์ การทำเช่นนั้นและเปรียบเทียบกิจวัตรของฉันเองกับนักแก้ปัญหา inbuilt ของ SciPy ฉันได้พบกับสิ่งแปลกประหลาดที่แสดงในพล็อตด้านล่าง ที่นี่คุณสามารถดูค่าลักษณะเฉพาะที่คำนวณตัวเลข 100 ตัวแรกและค่าลักษณะเฉพาะเชิงวิเคราะห์λn ยูมλnยูม.\lambda_{num}λnλana\lambda_{ana} ประมาณค่าลักษณะเฉพาะจำนวน 40 ผลลัพธ์เชิงตัวเลขเริ่มเบี่ยงเบนจากผลการวิเคราะห์ สิ่งนี้ไม่ทำให้ฉันประหลาดใจ (ฉันจะไม่อธิบายสาเหตุที่นี่เว้นแต่จะเกิดขึ้นในการสนทนา) อย่างไรก็ตามสิ่งที่น่าแปลกใจสำหรับฉันคือeigsh ()สร้างค่าลักษณะเฉพาะที่เสื่อมโทรม (ประมาณค่าลักษณะเฉพาะจำนวน 80) เหตุใด eigsh () จึงทำตัวเช่นนั้นแม้ค่าลักษณะเฉพาะจำนวนน้อยเช่นนั้น import numpy as np from scipy.sparse.linalg import eigsh import myFunctions as myFunc import matplotlib.pyplot as plt #discretize x-axis N = 100 xmin = -10. xmax = …

2
คำนวณค่าลักษณะเฉพาะทั้งหมดของเมทริกซ์ adjacency ที่ใหญ่และเบาบางมาก
ฉันมีสองกราฟที่มีเกือบ n ~ 100,000 โหนดแต่ละ ในกราฟทั้งสองแต่ละโหนดเชื่อมต่อกับ 3 โหนดอื่น ๆ ดังนั้นเมทริกซ์ adjacency จึงสมมาตรและเบาบางมาก ส่วนที่ยากคือฉันต้องการทั้งหมดค่าลักษณะเฉพาะของเมทริกซ์ adjacency แต่ไม่ใช่ค่าลักษณะเฉพาะ เพื่อความถูกต้องนี่จะเป็นครั้งหนึ่งในชีวิตของฉัน (เท่าที่ฉันสามารถเห็นได้อย่างน้อย!) ดังนั้นฉันต้องการได้รับค่าลักษณะเฉพาะทั้งหมดและไม่รังเกียจที่จะรอพวกเขาสักสองสามวัน ฉันลองscipyล้อมรอบARPACKแต่มันใช้เวลานานเกินไป ฉันพบห้องสมุดหลายแห่ง แต่พวกเขาก็ทำงานได้ดีที่สุดในการหาค่าย่อยที่มีค่ามากที่สุด / เล็กที่สุด มีห้องสมุดใดบ้างที่ใช้ได้กับเมทริกซ์กระจัดกระจายแบบสมมาตรที่มีการนำไปใช้แบบขนานเพื่อให้ได้ค่าลักษณะเฉพาะทั้งหมดหรือไม่

3
อัลกอริทึมโทมัสเป็นวิธีที่เร็วที่สุดในการแก้ปัญหาระบบเชิงเส้นที่กระจัดกระจายในแนวทแยงมุมสมมาตร
ฉันสงสัยว่าอัลกอริธึมของ Thomas นั้นเป็นวิธีที่เร็วที่สุด (พิสูจน์ได้หรือไม่) เพื่อแก้ปัญหาระบบ tridiagonal ที่กระจัดกระจายในแนวทแยงมุมแบบสมมาตรในแง่ของความซับซ้อนของอัลกอริทึม ฉันรู้ว่าทั้งอัลกอริธึมของ Thomas และ Multigrid นั้นมีความซับซ้อนแต่ปัจจัยคงที่สำหรับ Multigrid นั้นน้อยกว่านี้หรือไม่ สำหรับฉันดูเหมือนว่า multigrid อาจไม่เร็วกว่านี้ แต่ฉันก็ไม่คิดบวกO ( n )O(n)O(n) หมายเหตุ: ฉันกำลังพิจารณากรณีที่เมทริกซ์มีขนาดใหญ่มาก ยอมรับได้ทั้งวิธีโดยตรงหรือแบบวนซ้ำ

3
ตัวแก้เชิงเส้นเบาบางสำหรับหลาย ๆ มือขวา
ฉันจำเป็นต้องแก้ปัญหาระบบเชิงเส้นแบบกระจัดกระจาย (300x300 ถึง 1,000x1000) ที่มีด้านขวามือจำนวนมาก (300 ถึง 1,000) นอกเหนือจากปัญหาแรกนี้ฉันยังต้องการที่จะแก้ปัญหาระบบที่แตกต่างกัน แต่ด้วยองค์ประกอบที่ไม่เป็นศูนย์เหมือนกัน (ค่าที่แตกต่างกัน) ซึ่งเป็นระบบที่ห่างเหินจำนวนมากที่มีรูปแบบการกระจายอย่างต่อเนื่อง เมทริกซ์ของฉันไม่มีกำหนด ประสิทธิภาพของการแยกตัวประกอบและการกำหนดค่าเริ่มต้นไม่สำคัญ แต่ประสิทธิภาพของขั้นตอนการแก้คือ ขณะนี้ฉันกำลังพิจารณา PaStiX หรือ Umfpack และฉันอาจจะเล่นกับ Petsc (ซึ่งรองรับทั้งนักแก้ปัญหา) มีห้องสมุดที่สามารถใช้ประโยชน์จากความต้องการเฉพาะของฉัน (vectorization, multi-threading) หรือฉันควรพึ่งพานักแก้ปัญหาทั่วไปและ อาจแก้ไขได้เล็กน้อยตามความต้องการของฉัน เกิดอะไรขึ้นถ้าเมทริกซ์กระจัดกระจายมีขนาดใหญ่ขึ้นถึง ?106× 106106×10610^6 \times 10^6

4
แพคเกจ / อินเตอร์เฟส Python ที่ดีที่สุดสำหรับตัวแก้ปัญหาแบบเบาบางคืออะไร
กรุณาระบุแพ็คเกจ Python (Petsc4py ฯลฯ ... ) และตัวแก้ปัญหาแบบเบาบางโดยตรงที่รองรับ โปรดหนึ่งคำตอบ (community-wiki) ต่อแพ็คเกจ

1
ทำไม SVD ถึงพูดถึง QR และ LU น้อยกว่าสำหรับเมทริกซ์กระจัดกระจาย
ตัวอย่างเช่นไลบรารี C ++ sparse matrix ที่ฉันใช้ - Eigen และ SuiteSparse ดูเหมือนว่าพวกเขาจะไม่มี SVD funcitionality สำหรับ sparse matrix ดังนั้นเพียงแค่อยากรู้อยากเห็น SVD นั้นยากกว่า QR / LU สำหรับเมทริกซ์แบบกระจายหรือไม่

4
แพคเกจเมทริกซ์กระจัดกระจายแบบสี่แกนเลขคณิตใด ๆ ?
ฉันกำลังทำงานกับระบบสมการเชิงเส้นหร็อมแหร็มขนาดใหญ่ ฉันต้องการใช้เลขคณิตคู่สองครั้งหรือเลขคณิตคู่เลขคณิตเพื่อแก้ปัญหาเหล่านั้น ฉันรู้ว่ามีแพ็คเกจชื่อ MPACK ที่พัฒนาโดย Nakata, Maho ซึ่งสามารถทำการคำนวณเชิงพีชคณิตเชิงเส้นเชิงตัวเลขภายใต้การคำนวณทางคณิตศาสตร์แบบสี่คู่ อย่างไรก็ตามมันถูกออกแบบมาสำหรับเมทริกซ์หนาแน่นไม่ใช่เมทริกซ์เบาบาง คุณรู้หรือไม่ว่ามีแพคเกจเมทริกซ์กระจัดกระจายแบบ quad-double ใด ๆ ?

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.