NumPy บรอดคาสติ้ง

Numpy Br Xd Khas Ting



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

NumPy Broadcasting คืออะไร?

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

กฎการออกอากาศ

ต้องปฏิบัติตามแนวทางเฉพาะเมื่อออกอากาศ สิ่งเหล่านี้อธิบายไว้ด้านล่าง:







  1. รูปร่างของอาร์เรย์อันดับที่ต่ำกว่าเป็นสิ่งสำคัญที่จะต้องเติม 1s ไว้ข้างหน้าจนกว่ารูปร่างของอาร์เรย์ทั้งสองจะมีความยาวเท่ากัน ถ้าสองอาร์เรย์ไม่มีอันดับเดียวกัน
  2. อาร์เรย์สองชุดจะถือว่าเข้ากันได้หากมีขนาดมิติเท่ากัน หรือหากชุดใดชุดหนึ่งมีขนาดมิติเป็น 1
  3. อาร์เรย์สามารถออกอากาศร่วมกันได้ก็ต่อเมื่อขนาดและมิติตรงกันเท่านั้น
  4. เมื่อการออกอากาศเสร็จสิ้น ทุกอาร์เรย์จะทำหน้าที่เสมือนกับรูปแบบที่ตรงกับองค์ประกอบที่ใหญ่ที่สุดในรูปร่างของอาร์เรย์อินพุตทั้งสอง
  5. อาร์เรย์ตัวใดตัวหนึ่งจะทำงานเหมือนกับว่าถูกจำลองด้วยมิติข้อมูลนั้น หากอาร์เรย์อื่นมีขนาดที่มากกว่า 1 และอาร์เรย์แรกมีขนาดเท่ากับ 1

ตอนนี้ เรามาพูดถึงตัวอย่างการนำแนวคิดของการออกอากาศไปใช้กัน



ตัวอย่างที่ 1:

ในคู่ของอาร์เรย์ การดำเนินการ NumPy มักจะดำเนินการทีละองค์ประกอบ ในสถานการณ์ที่ตรงไปตรงมาที่สุด อาร์เรย์ทั้งสองต้องมีรูปร่างเหมือนกัน ดังตัวอย่างด้านล่าง:



นำเข้า งี่เง่า

one_arr = งี่เง่า อาร์เรย์ ( [ 2.0 , 3.0 , 1.0 ] )

two_arr = งี่เง่า อาร์เรย์ ( [ 3.0 , 3.0 , 3.0 ] )

พิมพ์ ( one_arr * two_arr )





ดังที่คุณเห็นจากโค้ดด้านบน เรามีสองอาร์เรย์: 'one_arr' และ 'two_ arr' ซึ่งแต่ละชุดมีชุดค่าที่แยกจากกัน ค่าใน 'one_arr' คือ [2.0,3.0,1.0] และ 'สอง _arr' คือ [3.0,3.0,3.0] คุณจะเห็นว่าผลลัพธ์ของการคำนวณผลคูณของอาร์เรย์ทั้งสองนี้มีดังนี้:



เมื่อรูปแบบอาร์เรย์ตรงตามข้อกำหนดบางประการ กฎการออกอากาศของ NumPy จะลดข้อจำกัดนี้ลง เมื่ออาร์เรย์และค่าสเกลาร์รวมกันในการดำเนินการ การออกอากาศจะแสดงในรูปแบบพื้นฐานที่สุด อย่างที่คุณเห็น 3 มีอยู่ในตัวแปรชื่อ 'two_arr'

นำเข้า งี่เง่า

one_arr = งี่เง่า อาร์เรย์ ( [ 2.0 , 3.0 , 1.0 ] )

two_arr = 3.0

พิมพ์ ( one_arr * two_arr )

รหัสด้านบนให้ผลลัพธ์ต่อไปนี้

ในตัวอย่างก่อนหน้านี้ โดยที่ 'two_arr' เป็นอาร์เรย์ ผลลัพธ์จะเท่ากัน เราอาจนึกภาพว่าสเกลาร์ 'two_arr' ถูกขยายระหว่างกระบวนการทางคณิตศาสตร์เป็นอาร์เรย์ที่มีรูปร่างเหมือนกับ 'one _arr' อาร์เรย์ 'two_arr' มีองค์ประกอบใหม่ที่เป็นเพียงการทำซ้ำของสเกลาร์แรก การเปรียบเทียบแบบยืดเยื้อเป็นเพียงการสมมุติเท่านั้น เพื่อให้การออกอากาศเป็นหน่วยความจำและประหยัดในการคำนวณเท่าที่เป็นไปได้ NumPy ฉลาดพอที่จะใช้ค่าสเกลาร์ดั้งเดิมมากกว่าการผลิตสำเนา

ตัวอย่างที่ 2:

นี่คือโปรแกรม Python ง่ายๆ อีกโปรแกรมหนึ่งที่ทำการออกอากาศ อีกครั้งหนึ่ง สองอาร์เรย์จะถูกสร้างขึ้นโดยมีค่าต่างกัน จำเป็นต้องเปลี่ยนรูปร่าง 'first_arr' เป็นเวกเตอร์คอลัมน์ที่มีรูปร่าง 3x1 เพื่อคำนวณผลิตภัณฑ์ภายนอก ต่อจากนี้ การออกอากาศจะดำเนินการกับ 'second_arr' เพื่อให้ผลลัพธ์เป็นขนาด 3×2 หรือที่เรียกว่าผลิตภัณฑ์ภายนอกของ 'first_arr' และ 'second_arr' การแพร่ภาพเป็น 2×3 เป็นไปได้เนื่องจาก 'result_arr' มีรูปร่างเป็น 2 ×3 เช่นเดียวกับรูปร่าง (3,)

หลังจากทำตามขั้นตอนทั้งหมดที่กล่าวมาข้างต้นแล้ว จะต้องรวมเวกเตอร์ไว้ในทุกคอลัมน์ของเมทริกซ์ซึ่งเป็น 'result_arr' และ 'second_arr' ซึ่งมีขนาด 2×3 และ (2, ) การแปลง 'result_arr' จะให้รูปร่าง 3 × 2 ซึ่งสามารถถ่ายทอดกับ 'second_arr' เพื่อให้ได้รูปแบบเดียวกัน โดยทั่วไปแล้ว การขนย้ายสิ่งนี้จะทำให้ได้ผลิตภัณฑ์ขั้นสุดท้ายในรูปทรง 2×3

นำเข้า งี่เง่า

first_arr = งี่เง่า อาร์เรย์ ( [ 12 , 24 , 14 ] )

วินาที_arr = งี่เง่า อาร์เรย์ ( [ สิบห้า , 22 ] )

พิมพ์ ( งี่เง่า ก่อร่างใหม่ ( first_arr , ( 3 , 1 ) ) * วินาที_arr )

result_arr = งี่เง่า อาร์เรย์ ( [ [ 12 , 22 , 31 ] , [ สิบห้า , 22 , สี่ห้า ] ] )

พิมพ์ ( result_arr + first_arr )

พิมพ์ ( ( result_arr. ตู่ + วินาที_arr ) . ตู่ )

พิมพ์ ( result_arr + numpy ก่อร่างใหม่ ( วินาที_arr , ( สอง , 1 ) ) )

พิมพ์ ( result_arr * สอง )

คุณสามารถดูผลลัพธ์ด้านล่าง

ตัวอย่างที่ 3:

อาร์เรย์สามมิติสามารถออกอากาศได้โดยใช้โปรแกรม Python ต่อไปนี้ ในตัวอย่างนี้ สองอาร์เรย์ชื่อ 'first_arr' และ 'second_arr' ได้ถูกสร้างขึ้น อาร์เรย์ 'first_arr' มีค่า [4,13,26,12] และ 'second_arr' มี [32,67,45,17] ค่า 2 มิติของอาร์เรย์เริ่มต้นสร้างความแตกต่าง ผลรวมของอาร์เรย์ที่หนึ่งและที่สองจะแสดงอยู่ด้านล่างหลังจากรันโค้ดแล้ว คุณจะเห็นว่าเรามีคำสั่งการพิมพ์สามชุดในโค้ด ซึ่งแต่ละอันจะแสดงข้อความ 'First array:', 'Second array' และ 'Third array:' ในทางกลับกัน ผลรวมของอาร์เรย์ที่สร้างขึ้นใหม่ทั้งสองนี้จะแสดงขึ้น

นำเข้า งี่เง่า

first_arr = งี่เง่า อาร์เรย์ ( [ [ 4 , 13 , 26 , 12 ] , [ 32 , 67 , สี่ห้า , 17 ] ] )

วินาที_arr = งี่เง่า อาร์เรย์ ( [ 24 , สี่ห้า , 66 , 87 ] )

พิมพ์ ( ' \n อาร์เรย์แรก: ' )

พิมพ์ ( first_arr )

พิมพ์ ( ' \n อาร์เรย์ที่สอง: ' )

พิมพ์ ( วินาที_arr )

พิมพ์ ( ' \n ผลรวมของอาร์เรย์ที่หนึ่งและที่สอง: ' )

sum_result = first_arr + วินาที_arr ;

พิมพ์ ( sum_result )

นี่คือภาพหน้าจอเอาต์พุตของรหัสที่กำหนด

ตัวอย่างที่ 4:

โปรแกรม Python รายการสุดท้ายที่ออกอากาศอาร์เรย์สามมิติมีให้ที่นี่ โปรแกรมนี้ระบุอาร์เรย์สองชุด โดยชุดแรกมีสามมิติ ผลรวมของอาร์เรย์ที่หนึ่งและที่สองจะแสดงดังที่แสดงด้านบนหลังจากรันโค้ดแล้ว แม้ว่าค่าในอาร์เรย์เหล่านี้จะแตกต่างกันไป แต่โค้ดที่เหลือจะเหมือนกับที่ใช้ในโปรแกรมตัวอย่างด้านบน

นำเข้า งี่เง่า

first_arr = งี่เง่า อาร์เรย์ ( [ [ 12 , สี่ห้า , 22 , 13 ] , [ 22 , 54 , 25 , 12 ] , [ ห้าสิบ , 40 , 18 , 26 ] ] )

วินาที_arr = งี่เง่า อาร์เรย์ ( [ 12 , 44 , 22 , 12 ] )

พิมพ์ ( ' \n อาร์เรย์แรก: ' )

พิมพ์ ( first_arr )

พิมพ์ ( ' \n อาร์เรย์ที่สอง: ' )

พิมพ์ ( วินาที_arr )

พิมพ์ ( ' \n ผลรวมของอาร์เรย์ที่หนึ่งและที่สอง: ' )

sum_result = first_arr + วินาที_arr ;

พิมพ์ ( sum_result )

คุณจะเห็นในรูปด้านล่างว่ามีการนำเสนออาร์เรย์ 3 มิติจากอาร์เรย์แรก ตามด้วยอาร์เรย์ 2 มิติจากอาร์เรย์ที่สอง และผลลัพธ์ของอาร์เรย์ 2 มิตินี้ใช้หลักการแพร่ภาพ

บทสรุป

บทความนี้กล่าวถึงการออกอากาศ ซึ่งเป็นแนวคิดที่สำคัญของ Python ใน NumPy คำว่า 'การแพร่ภาพ' หมายถึงความสามารถในการจัดการอาร์เรย์ของรูปทรงต่างๆ ในขณะที่ดำเนินการคำนวณทางคณิตศาสตร์ที่ดำเนินการบ่อย หัวข้อดังกล่าวได้ครอบคลุมตัวอย่างต่างๆ อย่างละเอียดถี่ถ้วนแล้ว บทความนี้ใช้โปรแกรมตัวอย่างที่กล่าวถึงเพื่อสาธิตวิธีการออกอากาศในอาร์เรย์ 1-D, 2-D และ 3-D ตามลำดับ คุณสามารถลองเรียกใช้ตัวอย่างเหล่านี้ในระบบของคุณ และดูผลลัพธ์เพื่อให้เข้าใจดีขึ้นว่าทุกอย่างทำงานอย่างไรโดยทั่วไป