คำถามติดแท็ก numpy

5
อนุญาตให้เมทริกซ์เข้าแทนที่ในจำนวนที่กำหนด
ฉันต้องการแก้ไขเมทริกซ์การเปลี่ยนตารางหนาแน่นในสถานที่โดยการเปลี่ยนลำดับของแถวและคอลัมน์หลายแห่งโดยใช้ไลบรารี่ของ python ศาสตร์นี้สอดคล้องกับการคูณเมทริกซ์ล่วงหน้าโดยเมทริกซ์การเปลี่ยนแปลง P และการโพสต์การคูณด้วย P ^ -1 = P ^ T แต่นี่ไม่ใช่วิธีการแก้ปัญหาที่สมเหตุสมผล ตอนนี้ฉันกำลังสลับแถวและคอลัมน์ด้วยตนเอง แต่ฉันคาดว่าจะมี numpy ที่มีฟังก์ชั่นที่ดี f (M, v) โดยที่ M มี n แถวและคอลัมน์และ v มีรายการ n ดังนั้นการปรับปรุง f (M, v) M ตามการเปลี่ยนแปลงดัชนี v. บางทีฉันแค่ค้นหาอินเทอร์เน็ตไม่ได้ บางสิ่งเช่นนี้อาจเกิดขึ้นได้กับ "การจัดทำดัชนีขั้นสูง" ของนัมมี่ แต่ความเข้าใจของฉันคือว่าโซลูชันดังกล่าวจะไม่เข้าแทนที่ นอกจากนี้สำหรับสถานการณ์ที่เรียบง่ายบางอย่างมันอาจจะเพียงพอที่จะแยกการติดตามการเปลี่ยนแปลงดัชนี แต่สิ่งนี้ไม่สะดวกในกรณีของฉัน เพิ่ม: บางครั้งเมื่อผู้คนพูดถึงการเรียงสับเปลี่ยนพวกเขาหมายถึงการสุ่มตัวอย่างแบบสุ่มเรียงสับเปลี่ยนเท่านั้นตัวอย่างเช่นเป็นส่วนหนึ่งของกระบวนการเพื่อรับค่า p ในสถิติ หรือพวกมันหมายถึงการนับหรือแจกแจงพีชคณิตที่เป็นไปได้ ฉันไม่ได้พูดถึงสิ่งเหล่านี้ เพิ่มเติม: เมทริกซ์มีขนาดเล็กพอที่จะใส่ลงในเดสก์ท็อปแรม …

1
ประสิทธิภาพของการดำเนินการของอาร์เรย์ Python / Numpy มีขนาดเพิ่มขึ้นอย่างไร
Python / Numpy arrays ปรับขนาดอย่างไรเมื่อเพิ่มขนาดอาเรย์ สิ่งนี้ขึ้นอยู่กับพฤติกรรมบางอย่างที่ฉันสังเกตเห็นในขณะทำการเปรียบเทียบรหัส Python สำหรับคำถามนี้: วิธีแสดงนิพจน์ที่ซับซ้อนนี้โดยใช้ชิ้นส่วนที่เป็นก้อน ปัญหาส่วนใหญ่เกี่ยวข้องกับการทำดัชนีเพื่อเติมอาเรย์ ฉันพบว่าข้อดีของการใช้ Cython และ Numpy (ไม่ดีมาก) กับ Python loop แตกต่างกันไปขึ้นอยู่กับขนาดของอาร์เรย์ที่เกี่ยวข้อง ทั้ง Numpy และ Cython มีความได้เปรียบด้านประสิทธิภาพที่เพิ่มขึ้นจนถึงจุดหนึ่ง (บางแห่งมีขนาดประมาณสำหรับ Cython และN = 2000สำหรับ Numpy บนแล็ปท็อปของฉัน) หลังจากนั้นข้อดีของมันก็ลดลง (ฟังก์ชัน Cython ยังคงเร็วที่สุด)ยังไม่มีข้อความ= 500N=500N=500ยังไม่มีข้อความ= 2000N=2000N=2000 ฮาร์ดแวร์นี้ถูกกำหนดหรือไม่? ในแง่ของการทำงานกับอาร์เรย์ขนาดใหญ่แนวทางปฏิบัติที่ดีที่สุดที่ควรปฏิบัติตามสำหรับรหัสที่ประสิทธิภาพนั้นได้รับการชื่นชมคืออะไร คำถามนี้ ( เพราะเหตุใดการปรับขนาดการคูณเมทริกซ์ - เวกเตอร์ของฉันไม่ได้ ) อาจเกี่ยวข้องกัน แต่ฉันสนใจที่จะเรียนรู้เพิ่มเติมเกี่ยวกับวิธีการที่แตกต่างกันของวิธีการรักษาอาร์เรย์ในระดับไพ ธ อนเมื่อเทียบกัน

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 = …

3
วิธีการแสดงออกที่ซับซ้อนนี้โดยใช้ชิ้นส่วนที่เป็นก้อน
ฉันต้องการใช้นิพจน์ต่อไปนี้ใน Python: ที่xและyเป็นอาร์เรย์ numpy ขนาดnและkเป็นอาร์เรย์ numpy ขนาดn × n ขนาดnอาจสูงถึงประมาณ 10,000 และฟังก์ชั่นเป็นส่วนหนึ่งของลูปภายในที่จะถูกประเมินหลายครั้งดังนั้นความเร็วจึงมีความสำคัญxi=∑j=1i−1ki−j,jai−jaj,xi=∑j=1i−1ki−j,jai−jaj, x_i = \sum_{j=1}^{i-1}k_{i-j,j}a_{i-j}a_j, xxxyyynnnkkkn×nn×nn\times nnnn เป็นการดีที่ฉันต้องการหลีกเลี่ยงการวนซ้ำไปมาโดยสิ้นเชิง แต่ฉันคิดว่ามันไม่ใช่จุดจบของโลกถ้ามี ปัญหาคือฉันมีปัญหาในการดูวิธีการทำโดยไม่ต้องมีลูปซ้อนกันสองสามครั้งและมีแนวโน้มที่จะทำให้มันค่อนข้างช้า ใครสามารถดูวิธีการแสดงสมการข้างต้นโดยใช้ numpy ในวิธีที่มีประสิทธิภาพและควรอ่านด้วยหรือไม่ โดยทั่วไปแล้ววิธีที่ดีที่สุดในการเข้าถึงของประเภทนี้คืออะไร
14 python  numpy 

1
จาโคเบียนที่ประมาณด้วยความแตกต่างที่แน่นอนสามารถทำให้เกิดความไม่เสถียรในวิธีการของนิวตันได้หรือไม่?
ฉันใช้ตัวแก้แบบย้อนกลับ - ออยเลอร์ในไพ ธ อน 3 (โดยใช้หมายเลข) เพื่อความสะดวกของฉันและเป็นแบบฝึกหัดฉันยังเขียนฟังก์ชั่นเล็ก ๆ ที่คำนวณความแตกต่างอัน จำกัด ของการไล่ระดับสีเพื่อที่ฉันจะได้ไม่ต้องพิจารณาจาโคเบียนในเชิงวิเคราะห์ (ถ้าเป็นไปได้!) ใช้คำอธิบายที่มีให้ในAscher และ Petzold 1998ฉันเขียนฟังก์ชันนี้ซึ่งกำหนดระดับความลาดชัน ณ จุดที่กำหนด x: def jacobian(f,x,d=4): '''computes the gradient (Jacobian) at a point for a multivariate function. f: function for which the gradient is to be computed x: position vector of the point for …

2
ความซับซ้อนของเมทริกซ์ผกผันในจำนวน
ฉันกำลังแก้สมการเชิงอนุพันธ์ที่ต้องสลับเมทริกซ์จตุรัสหนาแน่น เมทริกซ์ผกผันนี้ใช้เวลาในการคำนวณมากที่สุดดังนั้นฉันจึงสงสัยว่าถ้าฉันใช้อัลกอริทึมที่เร็วที่สุด ทางเลือกในปัจจุบันของฉันคือnumpy.linalg.inv จากตัวเลขของฉันฉันเห็นว่ามันปรับขนาดเป็นโดยที่ n คือจำนวนแถวดังนั้นวิธีที่ดูเหมือนจะเป็นการกำจัดแบบเกาส์เซียนO(n3)O(n3)O(n^3) ตามWikipediaมีอัลกอริทึมที่เร็วกว่าใช้ได้ ไม่มีใครรู้ว่ามีห้องสมุดที่ใช้สิ่งเหล่านี้หรือไม่? ฉันสงสัยว่าทำไม numpy จึงไม่ใช้อัลกอริธึมที่เร็วกว่านี้?

4
การปรับใช้หน่วยความจำอย่างมีประสิทธิภาพของการแยกย่อยค่าเอกพจน์ (SVD) บางส่วน
สำหรับการลดแบบจำลองฉันต้องการคำนวณเวกเตอร์เอกพจน์ทางซ้ายที่เกี่ยวข้องกับ - พูด 20 - ค่าเอกพจน์ที่ใหญ่ที่สุดของเมทริกซ์โดยที่และ 3 น่าเสียดายเมทริกซ์ของฉันจะหนาแน่นโดยไม่มีโครงสร้างใด ๆ N ≈ 10 6 k ≈ 10 3 AA∈RN,kA∈RN,kA \in \mathbb R^{N,k}N≈106N≈106N\approx 10^6k≈103k≈103k\approx 10^3AAA หากฉันเพิ่งเรียกsvdรูทีนจากnumpy.linalgโมดูลใน Python สำหรับเมทริกซ์แบบสุ่มขนาดนี้ฉันพบข้อผิดพลาดของหน่วยความจำ เพราะนี่คือการจัดสรรสำหรับการสลายตัวVSU A = V S UV∈RN,NV∈RN,NV\in \mathbb R^{N,N}A=VSUA=VSUA = VSU มีอัลกอริธึมที่หลีกเลี่ยงหลุมพรางนี้ไหม เช่นโดยการตั้งค่าเฉพาะเวกเตอร์เอกพจน์ที่สัมพันธ์กับค่าเอกพจน์ที่ไม่ใช่ศูนย์ ฉันพร้อมที่จะแลกเปลี่ยนในเวลาและความแม่นยำในการคำนวณ

1
การรวมตัวเลขสำหรับเส้นโค้งการสร้างแบบจำลองสำหรับตัวนำยิ่งยวด (Python)
ฉันเป็นนักฟิสิกส์ที่พยายามจำลองลักษณะของแรงดันไฟฟ้าในปัจจุบันของทางแยกตัวนำยิ่งยวดและตัวนำยิ่งยวด สมสำหรับรุ่นนี้คือ: ผม( ฉบับที่) =1อีRn - n∫∞- ∞| E|[E2-Δ21]1 / 2| E+eV|[(E+eV)2−Δ22]1/2[f(E)−f(E+eV)]dEI(V)=1eRn−n∫−∞∞|E|[E2−Δ12]1/2|E+eV|[(E+eV)2−Δ22]1/2[f(E)−f(E+eV)]dE\begin{align} I(V) = \frac{1}{eR_{\mathrm{n-n}}}\int_{-\infty}^{\infty}\frac{|E|}{[E^{2} - \Delta_{1}^{2}]^{1/2}}\frac{|E + eV|}{[(E + eV)^{2} - \Delta_{2}^{2}]^{1/2}}[f(E) - f(E + eV)]\,\mathrm{d}E \end{align} ค่าปัจจุบัน (หรือในรหัส) คำนวณโดยการประเมินอินทิกรัลสำหรับแรงดันไฟฟ้าที่กำหนด (หรือในรหัส)ผมผมIIVVVv ฉันได้ลองทำสิ่งนี้ใน Python แล้ว รหัสแสดงอยู่ด้านล่าง from scipy import integrate from numpy import * import pylab as pl import math …
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.