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

Vectorization หมายถึงกระบวนทัศน์การเขียนโปรแกรมที่ฟังก์ชันทำงานบนอาร์เรย์ทั้งหมดในครั้งเดียว สิ่งนี้ให้ประโยชน์ในแง่ของการเรียกใช้ฟังก์ชันการเข้าถึงหน่วยความจำการขนานและการแสดงรหัส ภาษาโปรแกรมบางภาษาเช่น MATLAB ได้รับการปรับให้เหมาะสมเพื่อให้ได้ประสิทธิภาพสูงสุดเมื่อกำหนดเป็นเวกเตอร์

10
ทำไมการเติมแบบวนรอบในแบบวนรอบจึงเร็วกว่าการวนซ้ำแบบรวมกันมาก?
สมมติว่าa1, b1, c1และd1ชี้ไปที่หน่วยความจำและกองรหัสตัวเลขของฉันมีห่วงหลักดังต่อไปนี้ const int n = 100000; for (int j = 0; j < n; j++) { a1[j] += b1[j]; c1[j] += d1[j]; } การวนซ้ำนี้จะดำเนินการ 10,000 ครั้งผ่านการforวนรอบนอกอื่น เพื่อเพิ่มความเร็วฉันเปลี่ยนรหัสเป็น: for (int j = 0; j < n; j++) { a1[j] += b1[j]; } for (int j = 0; j < …

10
ความแตกต่างระหว่างแผนที่, Applymap และวิธีการใช้ใน Pandas
คุณสามารถบอกฉันได้เมื่อใดที่จะใช้วิธีการเวกเตอร์เหล่านี้กับตัวอย่างพื้นฐาน? ฉันเห็นว่าmapเป็นSeriesวิธีการในขณะที่ส่วนที่เหลือเป็นDataFrameวิธีการ ฉันสับสนapplyและapplymapวิธีการต่าง ๆ ทำไมเรามีสองวิธีในการใช้ฟังก์ชั่นกับ DataFrame อีกครั้งตัวอย่างง่ายๆที่แสดงการใช้งานจะยอดเยี่ยม!

4
มีฟังก์ชั่น R สำหรับค้นหาดัชนีขององค์ประกอบในเวกเตอร์หรือไม่?
ใน R ฉันมีองค์ประกอบและเวกเตอร์x vฉันต้องการที่จะหาดัชนีแรกขององค์ประกอบในการที่จะมีค่าเท่ากับv xฉันรู้ว่าวิธีหนึ่งในการทำเช่นนี้คือ: which(x == v)[[1]]แต่ดูเหมือนว่าจะไม่มีประสิทธิภาพมากเกินไป มีวิธีโดยตรงมากกว่าที่จะทำหรือไม่ สำหรับคะแนนโบนัสมีฟังก์ชั่นที่ใช้งานxได้หรือไม่ถ้าเป็นเวคเตอร์? นั่นคือมันควรจะกลับเวกเตอร์ของดัชนีระบุตำแหน่งขององค์ประกอบของแต่ละที่ในxv

7
“ vectorization” คืออะไร
หลายครั้งในขณะนี้ฉันได้พบคำศัพท์นี้ใน matlab, fortran ... บางคน ... แต่ฉันไม่เคยพบคำอธิบายความหมายและสิ่งที่มันทำ? ผมเลยถามตรงนี้, เวกเตอร์คืออะไร, และมันมีความหมายว่าอะไร, ตัวอย่างเช่น "a loop is vectorized"?

4
ครอบครัว“ * นำไปใช้” ไม่ได้รับการปรับเวกเตอร์จริงๆเหรอ?
ดังนั้นเราจึงเคยพูดกับผู้ใช้ R ใหม่ทุกคนว่า " applyไม่ใช่ vectorized ลองดู Patrick Burns R Inferno Circle 4 " ซึ่งบอกว่า (ฉันพูด): การสะท้อนที่พบบ่อยคือการใช้ฟังก์ชั่นในครอบครัวใช้ นี้ไม่ได้เป็น vectorization ก็เป็นห่วงซ่อน ฟังก์ชั่นใช้มีห่วงสำหรับในความหมายของมัน ฟังก์ชัน lapply ฝังลูป แต่เวลาดำเนินการมีแนวโน้มที่จะเท่ากับคร่าว ๆ อย่างชัดเจนสำหรับลูป อันที่จริงการดูอย่างรวดเร็วของapplyซอร์สโค้ดแสดงการวนซ้ำ: grep("for", capture.output(getAnywhere("apply")), value = TRUE) ## [1] " for (i in 1L:d2) {" " else for (i in 1L:d2) {" โอเคจนถึงตอนนี้ แต่การดูlapplyหรือvapplyเปิดเผยภาพที่แตกต่างอย่างสิ้นเชิงจริง …

6
การประเมินฟังก์ชันอย่างมีประสิทธิภาพในทุกเซลล์ของอาร์เรย์ NumPy
ด้วยอาร์เรย์NumPy A วิธีใดที่เร็ว / มีประสิทธิภาพที่สุดในการใช้ฟังก์ชันเดียวกันfกับทุกเซลล์ สมมติว่าเราจะกำหนดให้A (ฉัน j) f (A (ฉัน j)) ฟังก์ชันfไม่มีเอาต์พุตไบนารีดังนั้นการดำเนินการมาสก์ (ing) จะไม่ช่วย การวนซ้ำสองรอบที่ "ชัดเจน" (ผ่านทุกเซลล์) เป็นทางออกที่ดีที่สุดหรือไม่?

2
ฟอร์ลูปในแพนด้าแย่จริงหรือ? ควรดูแลเมื่อใด
มีforลูปมัน "เลวร้าย"? ถ้าไม่เช่นนั้นในสถานการณ์ใดจะดีไปกว่าการใช้แนวทาง "vectorized" แบบเดิม ๆ 1 ฉันคุ้นเคยกับแนวคิดของ "vectorization" และวิธีที่แพนด้าใช้เทคนิคเวกเตอร์เพื่อเร่งความเร็วในการคำนวณ ฟังก์ชัน Vectorized จะออกอากาศการดำเนินการในทั้งซีรีส์หรือ DataFrame เพื่อให้ได้ความเร็วที่สูงกว่าการทำซ้ำตามปกติในข้อมูล อย่างไรก็ตามฉันค่อนข้างแปลกใจที่เห็นโค้ดจำนวนมาก (รวมถึงจากคำตอบใน Stack Overflow) เสนอวิธีแก้ปัญหาที่เกี่ยวข้องกับการวนซ้ำข้อมูลโดยใช้การวนซ้ำforและความเข้าใจในรายการ เอกสารประกอบและ API บอกว่าลูป "ไม่ดี" และควร "ไม่" ซ้ำในอาร์เรย์ชุดข้อมูลหรือเฟรมข้อมูล แล้วทำไมบางครั้งฉันจึงเห็นผู้ใช้แนะนำโซลูชันแบบวนซ้ำ 1 - แม้ว่าคำถามจะฟังดูกว้าง แต่ความจริงก็คือมีสถานการณ์ที่เฉพาะเจาะจงมากเมื่อforลูปมักจะดีกว่าการวนซ้ำตามอัตภาพ โพสต์นี้มีจุดมุ่งหมายเพื่อจับภาพนี้สำหรับลูกหลาน

11
ฉันจะใช้ฟังก์ชันกับทุกแถว / คอลัมน์ของเมทริกซ์ใน MATLAB ได้อย่างไร
คุณสามารถใช้ฟังก์ชั่นทุกรายการในเวกเตอร์โดยกล่าวว่าตัวอย่างเช่นv + 1, arrayfunหรือคุณสามารถใช้ฟังก์ชั่น ฉันจะทำมันสำหรับทุกแถว / คอลัมน์ของเมทริกซ์โดยไม่ต้องใช้ for loop ได้อย่างไร

8
คอมไพเลอร์ JIT ของ JVM สร้างโค้ดที่ใช้คำแนะนำจุดลอยตัวแบบเวกเตอร์หรือไม่
สมมติว่าปัญหาคอขวดของโปรแกรม Java ของฉันคือลูปที่แน่นพอที่จะคำนวณผลิตภัณฑ์จุดเวกเตอร์จำนวนมาก ใช่ฉันได้ทำโปรไฟล์แล้วใช่มันเป็นคอขวดใช่มันสำคัญใช่นั่นเป็นเพียงวิธีการที่อัลกอริทึมใช่ฉันใช้ Proguard เพื่อเพิ่มประสิทธิภาพโค้ดไบต์ ฯลฯ งานคือโดยพื้นฐานแล้วผลิตภัณฑ์ดอท เช่นเดียวกับฉันมีสองfloat[50]และฉันต้องคำนวณผลรวมของผลิตภัณฑ์คู่กัน ฉันรู้ว่าชุดคำสั่งโปรเซสเซอร์มีอยู่เพื่อดำเนินการประเภทนี้อย่างรวดเร็วและจำนวนมากเช่น SSE หรือ MMX ใช่ฉันสามารถเข้าถึงสิ่งเหล่านี้ได้โดยการเขียนโค้ดเนทีฟใน JNI การโทรของ JNI นั้นค่อนข้างแพง ฉันรู้ว่าคุณไม่สามารถรับประกันได้ว่า JIT จะรวบรวมหรือไม่รวบรวมอะไร มีใครเคยได้ยินเกี่ยวกับรหัสสร้าง JIT ที่ใช้คำแนะนำเหล่านี้หรือไม่? และถ้าเป็นเช่นนั้นมีอะไรเกี่ยวกับโค้ด Java ที่ช่วยให้คอมไพล์ได้ด้วยวิธีนี้หรือไม่? น่าจะเป็น "ไม่"; คุ้มค่าที่จะถาม

5
Matlab Vectorization - ไม่มีเมทริกซ์ดัชนีแถวเข้าสู่เซลล์
ฉันทำงานกับ Matlab ฉันมีเมทริกซ์จตุรัสไบนารี่ สำหรับแต่ละแถวมี 1 รายการหรือมากกว่าเป็น 1 ฉันต้องการผ่านแต่ละแถวของเมทริกซ์นี้และส่งกลับดัชนีของ 1s เหล่านั้นและเก็บไว้ในรายการของเซลล์ ฉันสงสัยว่ามีวิธีการทำเช่นนี้โดยไม่ต้องวนซ้ำแถวทั้งหมดของเมทริกซ์นี้หรือไม่เนื่องจากการวนซ้ำช้ามากใน Matlab ตัวอย่างเช่นเมทริกซ์ของฉัน M = 0 1 0 1 0 1 1 1 1 ในที่สุดฉันก็ต้องการสิ่งที่ต้องการ A = [2] [1,3] [1,2,3] ดังนั้นAเซลล์ มีวิธีการที่จะบรรลุเป้าหมายนี้โดยไม่ใช้ลูปโดยมีจุดประสงค์ในการคำนวณผลลัพธ์ได้เร็วขึ้นหรือไม่?

5
ค่าสูงสุดต่อเส้นทแยงมุมในอาร์เรย์ 2d
ฉันมีอาร์เรย์และต้องการความแตกต่างสูงสุดกับหน้าต่างแบบไดนามิก a = np.array([8, 18, 5,15,12]) print (a) [ 8 18 5 15 12] ดังนั้นก่อนอื่นฉันต้องสร้างความแตกต่างด้วยตัวเอง: b = a - a[:, None] print (b) [[ 0 10 -3 7 4] [-10 0 -13 -3 -6] [ 3 13 0 10 7] [ -7 3 -10 0 -3] [ -4 6 -7 …
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.