ฟังก์ชั่นดัชนีและการค้นหาใน Excel เป็นทางเลือกที่ดีที่สุดสำหรับ vpr ฟังก์ชันดัชนีและการค้นหาใน Excel เป็นทางเลือกที่ดีที่สุดสำหรับโปรแกรม vpr A ในการค้นหารูปแบบในโค้ด

สมมติว่ารายงานของคุณมีตารางที่มีข้อมูลจำนวนมากในหลายคอลัมน์ การวิเคราะห์ตารางดังกล่าวด้วยภาพเป็นเรื่องยากมาก และงานอย่างหนึ่งในการทำงานกับรายงานคือการวิเคราะห์ข้อมูลเกี่ยวกับส่วนหัวของแถวและคอลัมน์ที่เกี่ยวข้องกับเดือนที่ระบุ เมื่อมองแวบแรก นี่เป็นงานที่เรียบง่ายมาก แต่ไม่สามารถแก้ไขได้โดยใช้เพียงงานเดียว ฟังก์ชั่นมาตรฐาน- ใช่ แน่นอน คุณสามารถใช้เครื่องมือ: "HOME" - "Editing" - "Find" CTRL + F เพื่อเปิดหน้าต่างค้นหาค่าบนแผ่นงาน Excel หรือสร้างกฎการจัดรูปแบบตามเงื่อนไขสำหรับตาราง แต่จะเป็นไปไม่ได้ที่จะทำการคำนวณเพิ่มเติมกับผลลัพธ์ที่ได้รับ ดังนั้นจึงจำเป็นต้องสร้างและใช้สูตรที่เหมาะสมอย่างถูกต้อง

การค้นหาค่าในอาร์เรย์ Excel

วิธีแก้ไขปัญหามีลักษณะดังนี้:

  • ในเซลล์ B1 เราจะป้อนข้อมูลที่เราสนใจ
  • เซลล์ B2 จะแสดงส่วนหัวของคอลัมน์ที่มีค่าของเซลล์ B1
  • เซลล์ B3 จะแสดงชื่อของแถวที่มีค่าของเซลล์ B1

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

เราจะพิจารณาตัวเลือกโซลูชันที่มีความซับซ้อนแตกต่างกันตามลำดับ และผลลัพธ์สุดท้ายจะอยู่ที่ท้ายบทความ

การค้นหาค่าในคอลัมน์ Excel

ขั้นแรก เรามาเรียนรู้วิธีรับส่วนหัวคอลัมน์ของตารางตามค่ากันก่อน โดยทำตามขั้นตอนเหล่านี้:

  1. ในเซลล์ B1 ป้อนค่าที่นำมาจากตาราง 5277 และไฮไลต์พื้นหลังเป็นสีน้ำเงินเพื่อให้ฟิลด์อินพุตสามารถอ่านได้ (เราจะป้อนตัวเลขอื่นๆ ในเซลล์ B1 ในภายหลังเพื่อทดลองกับค่าใหม่)
  2. ในเซลล์ C2 ให้ป้อนสูตรเพื่อรับส่วนหัวของคอลัมน์ตารางที่มีค่านี้:
  3. หลังจากป้อนสูตรแล้ว ให้กดคีย์ลัด CTRL+SHIFT+Enter เพื่อยืนยัน เนื่องจากสูตรจะต้องดำเนินการในอาร์เรย์ หากทุกอย่างถูกต้อง วงเล็บปีกกา ( ) จะปรากฏขึ้นที่ขอบของแถบสูตร

การค้นหาค่าในสตริง Excel

ตอนนี้เราได้รับหมายเลขบรรทัดสำหรับค่าเดียวกัน (5277) เมื่อต้องการทำเช่นนี้ ให้ป้อนสูตรต่อไปนี้ในเซลล์ C3:

หลังจากป้อนสูตรเพื่อยืนยัน ให้กดคีย์ผสม CTRL+SHIFT+Enter อีกครั้งและรับผลลัพธ์:


สูตรส่งคืนหมายเลข 9 - พบส่วนหัวของแถวแผ่นงานโดยใช้ค่าตารางที่สอดคล้องกัน ด้วยเหตุนี้เราจึงมีที่อยู่แบบเต็มของค่า D9



วิธีรับชื่อคอลัมน์และชื่อแถวของตาราง

ตอนนี้ เรามาเรียนรู้วิธีรับพิกัดของตารางปัจจุบัน ไม่ใช่ทั้งชีตตามค่า กล่าวง่ายๆ ก็คือเราต้องค้นหาด้วยค่า 5277 แทนที่จะเป็น D9 เพื่อให้ได้ส่วนหัว:

  • สำหรับคอลัมน์ตาราง – มีนาคม;
  • สำหรับสาย – Product4.

เพื่อแก้ปัญหา งานนี้เราจะใช้สูตรที่มีค่าที่ได้รับแล้วในเซลล์ C2 และ C3 เพื่อทำสิ่งนี้ เราทำสิ่งนี้:


เป็นผลให้ได้รับพิกัดภายในของตารางตามค่า - มีนาคม สินค้า 4:


ค้นหาค่าเดียวกันในช่วง Excel

ในการตรวจสอบการมีอยู่ของรายการที่ซ้ำกันในค่าตาราง เราจะสร้างสูตรที่สามารถแจ้งให้เราทราบเกี่ยวกับการมีอยู่ของรายการที่ซ้ำกันและนับจำนวนของพวกเขา โดยป้อนสูตรในเซลล์ E2:

นอกจากนี้ สำหรับช่วงของส่วนของตาราง เราจะสร้างกฎการจัดรูปแบบตามเงื่อนไข:



อย่างที่คุณเห็น หากมีรายการที่ซ้ำกัน สูตรสำหรับส่วนหัวจะนำส่วนหัวจากรายการที่ซ้ำกันครั้งแรกในแนวนอน (จากซ้ายไปขวา) และสูตรในการรับชื่อ (หมายเลข) ของบรรทัดจะใช้ตัวเลขจากการซ้ำกันครั้งแรกในแนวตั้ง (จากบนลงล่าง) สำหรับการแก้ไข การตัดสินใจครั้งนี้มี 2 ​​วิธี:


ในกรณีนี้ เราจะเปลี่ยนสูตรอย่างใดอย่างหนึ่ง แต่ไม่ใช่ทั้งสองอย่างพร้อมกัน ควรระลึกไว้ว่าสูตรเก่าควรอยู่ในเซลล์ C3:


ที่นี่พิกัดแนวตั้งของรายการที่ซ้ำกันแรกจะแสดงอย่างถูกต้อง (จากบนลงล่าง) - I7 สำหรับแผ่นงานและสิงหาคม รายการที่ 2 สำหรับโต๊ะ ปล่อยให้ตัวเลือกนี้ไว้สำหรับตัวอย่างสุดท้ายถัดไป

ค้นหาค่าที่ใกล้เคียงที่สุดในช่วง Excel

ตารางนี้ยังไม่สมบูรณ์ ท้ายที่สุดแล้ว เมื่อวิเคราะห์ คุณจำเป็นต้องรู้คุณค่าทั้งหมดของมันอย่างชัดเจน ถ้าสูตรไม่พบตัวเลขที่ป้อนในเซลล์ B1 ในตาราง ข้อผิดพลาดจะถูกส่งกลับ - #VALUE! มันจะเหมาะอย่างยิ่งสำหรับสูตร ถ้าตัวเลขเดิมไม่อยู่ในตาราง ให้เลือกค่าที่ใกล้เคียงที่สุดที่มีอยู่ในตาราง หากต้องการสร้างโปรแกรมสำหรับวิเคราะห์ตาราง ให้ป้อนสูตรใหม่ในเซลล์ F1:

หลังจากนั้นก็ตามมา ในสูตรอื่นๆ ทั้งหมด ให้เปลี่ยนลิงก์แทน B1 ควรเป็น F1!คุณต้องเปลี่ยนลิงก์ในการจัดรูปแบบตามเงื่อนไขด้วย เลือก: "หน้าแรก" - "สไตล์" - "การจัดรูปแบบตามเงื่อนไข" - "จัดการกฎ" - "แก้ไขกฎ" และที่นี่ในพารามิเตอร์ระบุ F1 แทน B1 หากต้องการตรวจสอบการทำงานของโปรแกรม ให้ป้อนตัวเลขที่ไม่อยู่ในตารางลงในเซลล์ B1 เช่น 8000 ซึ่งจะนำไปสู่ผลลัพธ์สุดท้าย:


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


โปรแกรม Excel ของเราพบค่าที่ใกล้เคียงที่สุดที่ 4965 จากค่าเดิม - 5000 โปรแกรมดังกล่าวอาจมีประโยชน์สำหรับ โซลูชั่นอัตโนมัติงานวิเคราะห์ต่างๆ ในการวางแผนธุรกิจ การกำหนดเป้าหมาย การค้นหาวิธีแก้ปัญหาอย่างมีเหตุผล ฯลฯ และแถวและคอลัมน์ผลลัพธ์ทำให้คุณสามารถขยายความสามารถในการคำนวณของรายงานประเภทนี้เพิ่มเติมได้โดยใช้สูตร Excel ใหม่

เกี่ยวกับการเขียนโปรแกรมเชิงฟังก์ชันซึ่งดำเนินการภายใต้การอุปถัมภ์ของกองทุนเพื่อสนับสนุนการเขียนโปรแกรมเชิงฟังก์ชัน FP(FP) ตามธรรมเนียมแล้วฉันต้องการสรุปผลการแข่งขันและพูดคุยเกี่ยวกับการแก้ปัญหาการแข่งขันโดยใช้ภาษาโปรแกรม Haskell จึงขอเชิญชวนผู้สนใจอ่านบันทึกย่อนี้

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

  1. ระยะเวลาขั้นต่ำที่ความถี่ความน่าจะเป็นของเหตุการณ์ที่เกิดขึ้นอย่างน้อยหนึ่งวันในระยะเวลานั้นเท่ากับหรือมากกว่า 50% คือเท่าใด
  2. จำเป็นต้องคาดการณ์การปรากฎตัวของงานตั้งแต่วันที่จัดการแข่งขันจนถึงสิ้นปีปัจจุบัน

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

ยังคงต้องพิจารณาแก้ไขปัญหาเหล่านี้ในภาษาการเขียนโปรแกรม Haskell

ค้นหาช่วงเวลา

ก่อนอื่น มีการกำหนดรายการเหตุการณ์ที่เกิดขึ้น:

วันที่:: วันที่ = ["27/09/2556", "10/06/2556", "23/10/2556", "11/06/2556", "26/11/2556", "11/27 /2013", "21/12/2556", "30/12/2556", "01/06/2557", "16/01/2557", "17/01/2557", "21/01/2557 ", "25/01/2557", "26/01/2557", "02/05/2557", "02/11/2557", "21/02/2557", "03/02/2557", "03/07/2557", "30/03/2557", "04/08/2557", "18/04/2557", "23/04/2557", "27/04/2557", "05 /02/2014", "15/05/2014", "17/05/2014", "18/05/2014", "19/05/2014", "20/05/2014", "05/25 /2014", "26/05/2014", "28/05" .2014"]

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

Main::IO() main = do putStrLn("ลำดับวันที่พบรูปแบบในช่วงเวลาขั้นต่ำของความยาว "++ แสดง (ความยาว findMinimalPeriod)++ " วัน") เผยลำดับ findMinimalPeriod

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

ความสำคัญ:: นัยสำคัญ Int = 5 lowProbability:: Float lowProbability = 0.5 findMinimalPeriod:: [(Int, Float)] findMinimalPeriod = head $ filter (l -> maximum (map snd l) >= lowProbability) $ map process

ค่าคงที่นัยสำคัญจะกำหนด "ความสูง" ขั้นต่ำของกระบอกสูบที่มีมาตราส่วนเวลา (ท้ายที่สุด เพื่อที่จะหาช่วงเวลา คุณสามารถทำเครื่องหมายวันที่เกิดเหตุการณ์บนเทปยาว จากนั้นจึงพันด้วย เกลียวบนทรงกระบอกที่มีเส้นรอบวงที่กำหนดซึ่งกำหนดระยะเวลาตามลำดับรูปแบบจะมีลักษณะดังนี้ เส้นแนวตั้ง- ค่าคงที่ความน่าจะเป็นต่ำจะกำหนดเกณฑ์ขั้นต่ำสำหรับความน่าจะเป็นของเหตุการณ์ที่เกิดขึ้น ฟังก์ชัน findMinimalPeriod จะนำส่วนหัวของรายการที่ได้รับหลังจากการกรองรายการเพื่อดูความน่าจะเป็นอย่างน้อยตามเกณฑ์ที่กำหนด ซึ่ง (รายการ) ได้มาโดยการประมวลผล (ฟังก์ชันกระบวนการ) ตัวเลขตั้งแต่ 1 ถึงขีดจำกัดบน

ขอบเขตบนถูกกำหนดโดยใช้ฟังก์ชันช่วง ซึ่งมีคำจำกัดความดังนี้:

ช่วงเวลา:: Int ช่วง = เสร็จสิ้น - เริ่มต้นที่ start = stringToDayOfYear $ head วันที่เสร็จสิ้น = 365 + stringToDayOfYear (วันสุดท้าย)

อย่างที่คุณเห็น เรากำลังนับความยาวของช่วงเวลาที่ระบุวันที่ของเหตุการณ์เกิดขึ้น เราลบอันแรกออกจากวันสุดท้าย (เป็นไปได้ว่าเราควรบวก 1) ฟังก์ชั่นนี้ไม่ค่อยดีนักเพราะมีเลข 365 แสดงว่าไม่เป็นสากล ถึงอย่างไร. นอกจากนี้ ฟังก์ชันก่อนหน้า (findMinimalPeriod) โดยทั่วไปเขียนได้แย่มาก และอาจทำให้เกิดข้อผิดพลาดรันไทม์ได้ เนื่องจากไม่มีการตรวจสอบความว่างเปล่าของรายการที่ส่งผ่านไปยังฟังก์ชัน head

ตอนนี้เรามาดูการกำหนดฟังก์ชันกระบวนการกันดีกว่า:

กระบวนการ:: เศษส่วน a => Int -> [(Int, a)] กระบวนการ p = map (l -> (fst $ head l, ((/) `on` fromInteger) (ผลรวม $ map snd l) (toEnum $ ความยาว l))) $ groupBy ((==) `on` fst) $ sortBy (เปรียบเทียบ fst) $ map (first (`mod` p) . i -> ถ้าฉัน `elem` ds3 แล้ว (i, 1) อย่างอื่น (i, 0)) โดยที่ ds1 = map stringToDayOfYear วันที่ ds2 = ไม่แน่นอน (++) $ วินาที (แผนที่ (+ 365)) $ span (>= head ds1) ds1 ds3 = map (ลบ (head ds2)) ds2

ฟังก์ชันรับความยาวของระยะเวลาเป็นอินพุต และส่งกลับรายการคู่ (ฮิสโตแกรม) โดยองค์ประกอบแรกคือจำนวนวันในช่วงเวลานั้น และองค์ประกอบที่สองคือความน่าจะเป็นความถี่ของเหตุการณ์ที่เกิดขึ้นในวันนั้น . การใช้คำจำกัดความท้องถิ่น ds1, ds2 และ ds3 รายการของจำนวนวันที่เหตุการณ์เกิดขึ้นตามลำดับจะถูกสร้างขึ้น เริ่มต้นจากวันแรกในรายการวันที่ รายการนี้จะต้องปฏิบัติตามขั้นตอนต่อไปนี้ สำหรับตัวเลขทั้งหมดตั้งแต่ 1 ถึงจำนวนวันสุดท้ายที่เกิดเหตุการณ์ ให้หาเศษที่เหลือจากการหารตามความยาวของงวด สำหรับส่วนที่เหลือดังกล่าว แฟล็ก 0 จะถูกตั้งค่าหากไม่มีเหตุการณ์ในวันที่เกิดขึ้นที่สอดคล้องกัน และแฟล็ก 1 จะถูกตั้งค่าหากมี จากนั้นรายการสารตกค้างที่มีธงจะถูกจัดกลุ่มตามสารตกค้าง หลังจากนั้นกลุ่มจะแยกออกเป็นคู่ประเภท (จำนวนวันในช่วงเวลา ความน่าจะเป็นของเหตุการณ์ที่เกิดขึ้น) ทั้งหมด.

ที่นี่เราต้องพิจารณาฟังก์ชันบริการเพิ่มเติมอีกสองฟังก์ชัน:

Double:: a -> (a, a) double x = (x, x) stringToDayOfYear:: String -> Int stringToDayOfYear = uncurry (monthAndDayToDayOfYear False) (อ่าน . เอา 2 . วาง 3 *** อ่าน . เอา 2) . สองเท่า

ไม่มีอะไรจะพูดเกี่ยวกับอันแรก (สิ่งเดียวที่แปลกคือคำจำกัดความของมันไม่ได้อยู่ในโมดูล Prelude มาตรฐาน แม้ว่าจะเข้าใจได้เนื่องจากมันเป็นเรื่องเล็กน้อยมาก) ฟังก์ชันที่สองแปลงวันที่จากการแสดงสตริง "DD.MM.YYYY" เป็นตัวเลขที่ยอมรับในโมดูล Data.Time.Calendar.MonthDay ซึ่งใช้ในการประมวลผลวันที่

สุดท้ายนี้ เรามานิยามฟังก์ชันเปิดเผยลำดับกันดีกว่า:

RevealSequences:: [(Int, Float)] -> IO () เผยลำดับ ps = ทำ ให้ l = ความยาว ps (d1, p1) = maximumBy (เปรียบเทียบ snd) ps (d2, p2) = maximumBy (เปรียบเทียบ snd) $ ลบ ( d1, p1) ps putStrLn ("การเกิดขึ้นสูงสุดของเหตุการณ์ (ความน่าจะเป็น: " ++ แสดง p1 ++ ") เกิดขึ้นใน " ++ แสดง (d1 + 1) ++ "วันที่ของ " ++ แสดง l ++ "-ช่วงวัน") putStrLn("ค่าสูงสุดที่สอง (ความน่าจะเป็น: "++show p2++") เกิดขึ้นใน "++show(d2+1)++"วันที่")

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

การพยากรณ์

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

ลองทำตรงนั้นตรงนี้กัน ก็สามารถเสนอแนะเป็นแนวทางได้ ลองพิจารณาช่วงเวลาที่เป็นไปได้ทั้งหมด โดยเริ่มจากขั้นต่ำที่พบในขั้นตอนก่อนหน้า (อันที่เล็กกว่า พูดตามตรง ไม่ได้สร้างแรงบันดาลใจให้เกิดความมั่นใจจากมุมมองของความน่าเชื่อถือทางสถิติ) และสิ้นสุดด้วยความยาวของระยะเวลาการสังเกตที่ทราบ หารด้วยค่าเผื่อที่ยอมรับได้ มาตรฐาน (“ความหนา” ตามที่เราเรียกกันก่อนหน้านี้) . สำหรับแต่ละช่วงเวลาเหล่านี้ เราจะได้ความน่าจะเป็นของเหตุการณ์ที่เกิดขึ้นในแต่ละวันของช่วงเวลานั้น เนื่องจากเราได้เรียนรู้แล้วว่าจะทำเช่นนี้โดยใช้ฟังก์ชันกระบวนการ ต่อไป เราจะค้นหาความน่าจะเป็นโดยเฉลี่ยในแต่ละวันเทียบกับความน่าจะเป็นทั้งหมดที่พบในแต่ละช่วงเวลาที่พิจารณา

เป็นวิธีนี้ที่ฟังก์ชันต่อไปนี้ใช้:

การคาดการณ์:: FilePath -> String -> String -> IO () คาดการณ์ fp sd fd = do ให้ (b, e) = (ความยาว findMinimalPeriod, ช่วงเวลา `นัยสำคัญ div`) writeFile fp $ unlines $ map (((n, q ) -> ให้ (m, d) = dayOfYearToMonthAndDay False (n - 365) ใน PrettyShowInt d ++ "." ++ PrettyShowInt m ++ ".2014: " ++ PrettyShowFloat q) วินาที (/ toEnum (e - b ) + 1))) $ foldr1 (zipWith ((d, q1) (_, q2) -> (d, q1 + q2))) $ map getProbabilities โดยที่ getProbabilities p = ให้ ds = stringToDayOfYear $ head date fs = 365 + stringToDayOfYear (วันสุดท้าย) d1 = 365 + stringToDayOfYear sd d2 = 365 + stringToDayOfYear fd แบบหล่น (ช่วง + (d1 - fs)) $ zipWith (x (_, q) -> (x, q)) $ รอบ $ กระบวนการ p LeadingZero :: String -> String LeadingZero [c] = "0" : [c] LeadingZero c = c PrettyShowInt i = LeadingZero $ show i PrettyShowFloat f = Let (d, r) = span (/= ".") $ แสดง ( f * 100) ใน leadZero d++ ใช้เวลา 5 (r++ รอบ "0")

คำจำกัดความของมันดูค่อนข้างน่ากลัว แต่แก่นของการคำนวณคือคำจำกัดความในเครื่องของ getProbabilities (ชื่อควรทำให้ชัดเจนว่าสอดคล้องกับขั้นตอนใดของวิธีการ) ส่วนที่เหลือเป็นเพียงการเชื่อมโยงสำหรับการส่งออกค่าที่ได้รับไปยังไฟล์ กำหนดตามเงื่อนไขรูปแบบการแข่งขัน

โดยทั่วไปนั่นคือทั้งหมด ตอนนี้สิ่งที่เหลืออยู่คือรอจนถึงสิ้นปีแล้วเปรียบเทียบการคาดการณ์กับข้อเท็จจริง

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

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

ด้วยการรวมหลักการทั้งสองนี้เข้าด้วยกัน เราสามารถสร้างวิธีแก้ไขปัญหาของเราได้

พื้นที่ผสมผสาน

ลองใช้เวกเตอร์บิตอินพุตแล้วกำหนดหมายเลขบิตของมัน มาสร้าง "คะแนน" แบบผสมผสานกัน ลองนำบิตสุ่มหลายๆ บิตของเวกเตอร์อินพุตไปยังแต่ละจุด (รูปด้านล่าง) เมื่อสังเกตอินพุตแต่ละจุดเหล่านี้จะไม่เห็นภาพรวมทั้งหมด แต่จะเป็นเพียงส่วนเล็ก ๆ เท่านั้นซึ่งกำหนดโดยบิตที่มาบรรจบกันที่จุดที่เลือก ดังนั้นในรูปด้านล่าง จุดซ้ายสุดที่มีดัชนี 0 จะตรวจสอบเฉพาะบิต 1, 6, 10 และ 21 ของแหล่งที่มา สัญญาณอินพุต- มาสร้างจุดดังกล่าวกันเยอะๆ แล้วเรียกเซตของพวกมันว่าพื้นที่เชิงผสมผสาน


พื้นที่ผสมผสาน

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

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

หากคุณมองหารูปแบบ "head-on" นั่นคือการดูเวกเตอร์อินพุตทั้งหมดและเอาท์พุตทั้งหมด ก็ไม่ชัดเจนว่าจะต้องทำอะไรและจะย้ายไปที่ใด หากคุณเริ่มสร้างสมมติฐานเกี่ยวกับสิ่งที่อาจขึ้นอยู่กับสิ่งใด การระเบิดแบบผสมผสานจะเกิดขึ้นทันที จำนวนสมมติฐานที่เป็นไปได้กลายเป็นเรื่องมหึมา

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

เมื่อจุดต่างๆ ของปริภูมิเชิงผสมผสานที่มี "มุมมอง" ที่จำกัดมาก (พื้นที่ย่อยแบบสุ่ม) ถูกสร้างขึ้น ปรากฎว่าบางจุดอาจโชคดีและมองเห็นรูปแบบ หากไม่บริสุทธิ์ทั้งหมด อย่างน้อยที่สุดก็อยู่ในรูปแบบที่บริสุทธิ์อย่างมีนัยสำคัญ มุมมองที่จำกัดเช่นนี้จะทำให้สามารถดำเนินการไล่ระดับสีและรับรูปแบบที่บริสุทธิ์ได้ ความน่าจะเป็นที่แต่ละจุดจะสะดุดกับรูปแบบนั้นอาจไม่สูงมาก แต่คุณสามารถเลือกจำนวนคะแนนดังกล่าวได้เสมอเพื่อรับประกันว่ารูปแบบใดๆ จะ “ปรากฏขึ้นที่ไหนสักแห่ง”

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

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

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

กลุ่มตัวรับ

จะค้นหารูปแบบในปริภูมิเชิงผสมได้อย่างไร? แต่ละจุดจะเห็นส่วนของเวกเตอร์อินพุตของตัวเอง หากสิ่งที่เธอเห็นมีบิตที่แอคทีฟค่อนข้างมาก เราก็สรุปได้ว่าสิ่งที่เธอเห็นนั้นมีรูปแบบบางอย่าง นั่นคือชุดของบิตที่ใช้งานซึ่งเข้าถึงจุดสามารถเรียกได้ว่าเป็นสมมติฐานเกี่ยวกับการมีอยู่ของรูปแบบ ขอให้เราจำสมมติฐานนี้ นั่นคือ เราจะแก้ไขชุดของบิตที่ใช้งานซึ่งมองเห็นได้ ณ จุดหนึ่ง ในสถานการณ์ที่แสดงในภาพด้านล่าง เป็นที่ชัดเจนว่าต้องแก้ไขที่จุด 0 บิต 1, 6 และ 21


แก้ไขบิตในคลัสเตอร์

เราจะเรียกบันทึกของจำนวนหนึ่งบิตว่าตัวรับสำหรับบิตนี้ นี่หมายความว่าตัวรับจะตรวจสอบสถานะของบิตที่สอดคล้องกันของเวกเตอร์อินพุตและตอบสนองเมื่อมีอันหนึ่งปรากฏขึ้นที่นั่น

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

เนื่องจากข้อมูลของเราไม่ได้ถูกเข้ารหัสโดยแต่ละบิต แต่ด้วยโค้ด ความแม่นยำที่เรากำหนดสมมติฐานจึงขึ้นอยู่กับจำนวนบิตที่เรานำเข้าคลัสเตอร์ ข้อความของโปรแกรมแนบมากับบทความ นักแก้ปัญหาด้วยการเข้ารหัสสตริง ตามค่าเริ่มต้น โปรแกรมจะมีการตั้งค่าดังต่อไปนี้:

  • ความยาวเวกเตอร์อินพุต - 256 บิต;
  • ความยาวเวกเตอร์เอาท์พุต - 256 บิต;
  • ตัวอักษรตัวเดียวถูกเข้ารหัสด้วย 8 บิต
  • ความยาวบรรทัด - 5 ตัวอักษร;
  • จำนวนบริบทออฟเซ็ต - 10;
  • ขนาดพื้นที่รวมกัน – 60,000;
  • จำนวนบิตที่ตัดกันที่จุดหนึ่งคือ 32;
  • เกณฑ์การสร้างคลัสเตอร์ – 6;
  • เกณฑ์สำหรับการเปิดใช้งานคลัสเตอร์บางส่วนคือ 4

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

ขอแนะนำเกณฑ์ขั้นต่ำสำหรับจำนวนตัวรับที่จำเป็นในการสร้างสมมติฐาน (ในตัวอย่างคือ 6) มาเริ่มเรียนรู้กันเลย เราจะจัดเตรียมซอร์สโค้ดและโค้ดที่เราต้องการรับเป็นเอาต์พุต สำหรับซอร์สโค้ด มันง่ายที่จะคำนวณจำนวนบิตที่ใช้งานอยู่ในแต่ละจุดในพื้นที่เชิงรวม เราจะเลือกเฉพาะจุดที่เชื่อมต่อกับบิตที่ใช้งานอยู่ของโค้ดเอาต์พุตและจำนวนบิตที่ใช้งานอยู่ของโค้ดอินพุตที่รวมอยู่ในนั้นจะไม่น้อยกว่าเกณฑ์สำหรับการสร้างคลัสเตอร์ ณ จุดดังกล่าว เราจะสร้างกลุ่มของตัวรับที่มีชุดบิตที่สอดคล้องกัน มาบันทึกคลัสเตอร์เหล่านี้ตรงจุดที่พวกมันถูกสร้างขึ้นกันเถอะ เพื่อไม่ให้สร้างรายการที่ซ้ำกัน ขั้นแรกเราตรวจสอบก่อนว่าคลัสเตอร์เหล่านี้ไม่ซ้ำกันสำหรับจุดเหล่านี้ และจุดนั้นไม่มีคลัสเตอร์เดียวกันทุกประการ

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

การศึกษา. การรวมหน่วยความจำ

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

มีแนวทางที่แตกต่างกันในการแก้ปัญหา ฉันจะอธิบายหนึ่งในนั้นโดยไม่อ้างว่าดีที่สุด ฉันได้ผ่านตัวเลือกมากมาย ตัวเลือกนี้ทำให้ฉันหลงใหลด้วยคุณภาพงานและความเรียบง่าย แต่ไม่ได้หมายความว่าไม่สามารถปรับปรุงได้

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

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

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


พงศาวดารของการเปิดใช้งานบางส่วนของคลัสเตอร์ตัวรับ

เราสนใจอะไรเกี่ยวกับสถิติเหล่านี้? เราสนใจว่าบิตใดทำงานร่วมกันบ่อยกว่าบิตอื่น อย่าสับสนกับบิตที่พบบ่อยที่สุด หากเราคำนวณความถี่ของการเกิดขึ้นสำหรับแต่ละบิตและรับบิตที่พบบ่อยที่สุด นี่จะเป็นค่าเฉลี่ย ซึ่งไม่ใช่สิ่งที่เราต้องการเลย หากรูปแบบที่เสถียรหลายรูปแบบมาบรรจบกัน ณ จุดหนึ่ง เมื่อหาค่าเฉลี่ยแล้ว จะได้ "ความไม่สม่ำเสมอ" โดยเฉลี่ยระหว่างรูปแบบเหล่านั้น ในตัวอย่างของเรา เห็นได้ชัดว่าบรรทัดที่ 1, 2 และ 4 มีความคล้ายคลึงกัน และบรรทัดที่ 3, 4 และ 6 ก็คล้ายกันเช่นกัน เราจำเป็นต้องเลือกรูปแบบใดรูปแบบหนึ่งเหล่านี้ โดยควรเป็นรูปแบบที่แข็งแกร่งที่สุด และล้างบิตที่ไม่จำเป็นออกไป

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

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

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


ผลลัพธ์ที่ได้หลังจากการแยกองค์ประกอบหลักแรกซ้ำหลายครั้ง

หากตอนนี้เราตัดคลัสเตอร์ออก นั่นคือ เหลือเฉพาะตัวรับที่มีน้ำหนักสูง (เช่น สูงกว่า 0.75) เราก็จะล้างรูปแบบบิตสัญญาณรบกวนที่ไม่จำเป็นออกไป ขั้นตอนนี้สามารถทำซ้ำได้หลายครั้งเมื่อมีการสะสมสถิติ เป็นผลให้เราสามารถเข้าใจได้ว่ามีรูปแบบใด ๆ ในคลัสเตอร์หรือว่าเรารวบรวมชุดบิตแบบสุ่มไว้ด้วยกันหรือไม่ หากไม่มีรูปแบบ การตัดคลัสเตอร์จะทำให้ได้แฟรกเมนต์สั้นเกินไป ในกรณีนี้ คลัสเตอร์ดังกล่าวสามารถลบออกได้เนื่องจากเป็นสมมติฐานที่ล้มเหลว

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

กระบวนการสะสมคลัสเตอร์ใหม่ค่อนข้างรวดเร็ว แต่ละประสบการณ์ใหม่จะสร้างคลัสเตอร์สมมติฐานใหม่หลายพันกลุ่ม ขอแนะนำให้ทำการฝึกเป็นระยะโดยหยุดพักเพื่อ "นอน" เมื่อสร้างคลัสเตอร์ในจำนวนวิกฤติ จำเป็นต้องสลับไปที่โหมดการทำงาน "ไม่ได้ใช้งาน" ในโหมดนี้ ประสบการณ์ที่จดจำไว้ก่อนหน้านี้จะถูกเลื่อนดู แต่นี่ไม่ได้สร้างสมมติฐานใหม่ แต่เพียงเท่านั้น กำลังตรวจสอบเก่า ผลจาก "การนอนหลับ" จึงเป็นไปได้ที่จะลบสมมติฐานเท็จจำนวนมากและเหลือเฉพาะสมมติฐานที่ผ่านการทดสอบเท่านั้น หลังจาก “หลับ” พื้นที่การจัดผสมผสานไม่เพียงแต่เคลียร์และพร้อมรับข้อมูลใหม่เท่านั้น แต่ยังมั่นใจในสิ่งที่เรียนรู้ “เมื่อวาน” มากขึ้นอีกด้วย

เอาท์พุตพื้นที่เชิงผสมผสาน

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

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

หลังจากการฝึกอบรม ผลลัพธ์จะเริ่มสร้างส่วนที่ตรงกับสิ่งที่เราต้องการ (ภาพด้านล่าง)


ตัวอย่างวิธีการทำงานของพื้นที่เชิงผสมผสานระหว่างกระบวนการเรียนรู้ (ประมาณ 200 ขั้นตอน) ด้านบนเป็นซอร์สโค้ด ตรงกลางเป็นโค้ดที่จำเป็น ด้านล่างเป็นโค้ดที่ทำนายโดยปริภูมิเชิงผสม

เอาท์พุตของพื้นที่เชิงรวมจะเริ่มสร้างโค้ดเอาต์พุตที่ต้องการได้ดีขึ้นทีละน้อย หลังจากฝึกหลายพันขั้นตอน ผลลัพธ์ที่ได้จะถูกสร้างขึ้นใหม่ด้วยความแม่นยำสูงพอสมควร (ภาพด้านล่าง)


ตัวอย่างวิธีการทำงานของพื้นที่เชิงผสมผสานที่ได้รับการฝึกอบรม ด้านบนเป็นซอร์สโค้ด ตรงกลางเป็นโค้ดที่จำเป็น ด้านล่างเป็นโค้ดที่ทำนายโดยปริภูมิเชิงผสม

เพื่อให้เห็นภาพวิธีการทำงานทั้งหมด ฉันจึงบันทึกวิดีโอพร้อมกระบวนการเรียนรู้ นอกจากนี้ บางทีคำอธิบายของฉันอาจช่วยให้คุณเข้าใจห้องครัวทั้งหมดนี้ได้ดีขึ้น

การเสริมสร้างกฎเกณฑ์

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

ไม่ใช่เรื่องยากที่จะคิดกฎสำหรับการทดสอบสมมติฐานในการยับยั้งและกระตุ้นให้เกิดการรวมกลุ่มของกลุ่มตัวรับที่ยับยั้ง

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

ป่าสุ่ม

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

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

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


ตัวอย่างของแผนผังการตัดสินใจ

สำหรับแผนผังการตัดสินใจ มีอัลกอริธึมการเรียนรู้ต่างๆ ที่ช่วยให้คุณสามารถสร้างแผนผังที่มีคุณลักษณะที่เหมาะสมที่สุดไม่มากก็น้อยในโหนดได้

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

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

ชีววิทยาแห่งการเรียนรู้

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

มีตัวรับที่แตกต่างกันมากมายอยู่บนเยื่อหุ้มเซลล์ประสาท ตัวรับเหล่านี้ส่วนใหญ่เป็น "การลอยตัวอิสระ" เมมเบรนสร้างสภาพแวดล้อมสำหรับตัวรับซึ่งสามารถเคลื่อนที่ได้อย่างอิสระ และเปลี่ยนตำแหน่งบนพื้นผิวของเซลล์ประสาทได้อย่างง่ายดาย (Sheng, M., Nakagawa, T., 2002) (Tovar K. R., Westbrook G. L., 2002)


เมมเบรนและตัวรับ

ในแนวทางคลาสสิก มักจะไม่เน้นเหตุผลของ "เสรีภาพ" ของผู้รับ เมื่อไซแนปส์เพิ่มความไวของมัน สิ่งนี้จะมาพร้อมกับการเคลื่อนที่ของตัวรับจากช่องว่างนอกไซแนปส์ไปยังรอยแยกไซแนปส์ (Malenka R.C., Nicoll R.A., 1999) ความจริงเรื่องนี้ถูกรับรู้โดยปริยายว่าเป็นเหตุผลในการเคลื่อนที่ของตัวรับ

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

ตัวรับ Metabotropic และเรากำลังพูดถึงพวกมันมีรูปร่างค่อนข้างซับซ้อน (รูปด้านล่าง) ประกอบด้วยโดเมนเมมเบรนเจ็ดโดเมนที่เชื่อมต่อกันด้วยลูป นอกจากนี้ยังมีปลายฟรีสองอัน เนื่องจากประจุไฟฟ้าสถิตของสัญญาณต่างๆ ปลายอิสระจึงสามารถ "เกาะติด" ซึ่งกันและกันผ่านเมมเบรนได้ เนื่องจากการเชื่อมต่อดังกล่าว ตัวรับจึงถูกรวมเข้าเป็นกลุ่มก้อน


ตัวรับเมตาโบโทรปิกเดี่ยว

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

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

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

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

การรวมสัญญาณจากไซแนปส์ต่างๆ ของแผนผังเดนไดรต์เดียวกันอาจไม่ใช่การเพิ่มเชิงตรรกะง่ายๆ แต่อาจซับซ้อนกว่าและใช้อัลกอริธึมการบูสต์ที่ยุ่งยากบางประเภท

ฉันขอเตือนคุณว่าองค์ประกอบพื้นฐานของเยื่อหุ้มสมองคือคอลัมน์ขนาดเล็กของเยื่อหุ้มสมอง ในคอลัมน์ขนาดเล็ก มีเซลล์ประสาทประมาณร้อยเซลล์อยู่ใต้อีกเซลล์หนึ่ง ในเวลาเดียวกัน พวกมันถูกห่อหุ้มอย่างแน่นหนาด้วยการเชื่อมต่อ ซึ่งมีมากมายภายในคอลัมน์ขนาดเล็กมากกว่าการเชื่อมต่อไปยังคอลัมน์ขนาดเล็กที่อยู่ใกล้เคียง เปลือกสมองทั้งหมดเป็นพื้นที่ของคอลัมน์ขนาดเล็กดังกล่าว เซลล์ประสาทแบบมินิคอลัมน์หนึ่งอันสามารถสอดคล้องกับหนึ่งบิตเอาท์พุตได้ เซลล์ประสาททั้งหมดของมินิคอลัมน์ในคอร์เทกซ์หนึ่งอันสามารถเป็นอะนาล็อกของเวกเตอร์ไบนารีเอาท์พุตได้

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

ฝัน

ในคนที่มีสุขภาพแข็งแรง การนอนหลับจะเริ่มต้นด้วยการนอนหลับแบบสโลว์เวฟระยะแรก ซึ่งใช้เวลาประมาณ 5-10 นาที มาถึงขั้นตอนที่ 2 ซึ่งใช้เวลาประมาณ 20 นาที ใช้เวลาประมาณ 30-45 นาทีในช่วงระยะที่สามและสี่ หลังจากนี้ ผู้นอนหลับจะกลับสู่ระยะที่ 2 ของการนอนหลับแบบคลื่นช้าๆ หลังจากนั้นจะเกิดการนอนหลับแบบ REM ครั้งแรก ซึ่งมีระยะเวลาสั้นๆ ประมาณ 5 นาที ในระหว่างการนอนหลับ REM ลูกตาจะเคลื่อนไหวอย่างรวดเร็วภายใต้เปลือกตาที่ปิดอยู่บ่อยครั้งและเป็นระยะๆ หากคุณปลุกคนหลับในเวลานี้ ใน 90% ของกรณี คุณจะได้ยินเรื่องราวเกี่ยวกับความฝันอันสดใส ลำดับทั้งหมดนี้เรียกว่าวงจร รอบแรกใช้เวลา 90-100 นาที จากนั้นวงจรจะเกิดซ้ำ โดยสัดส่วนของการนอนหลับแบบคลื่นช้าจะลดลง และสัดส่วนของการนอนหลับ REM จะค่อยๆ เพิ่มขึ้น ซึ่งในบางกรณีอาจถึง 1 ชั่วโมง โดยเฉลี่ยแล้ว การนอนหลับเต็มอิ่มจะมีรอบครบห้ารอบ

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

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

คุณสามารถดูและประเมินความเข้มข้นของโปรตีนได้โดยการย้อมส่วนหนึ่งของเนื้อเยื่อสมองด้วยสีย้อมที่เลือกทำปฏิกิริยากับโปรตีนที่ต้องการ การสังเกตที่คล้ายกันแสดงให้เห็นว่าการเปลี่ยนแปลงโปรตีนที่เกี่ยวข้องกับความทรงจำอย่างกว้างขวางที่สุดเกิดขึ้นระหว่างการนอนหลับ (Chiara Cirelli, Giulio Tononi, 1998) (Cirelli, 2002) (รูปด้านล่าง)


การกระจายโปรตีนส่วนโค้งในเยื่อหุ้มสมองข้างขม่อมของหนูหลังจากการนอนหลับสามชั่วโมง (S) และหลังจากการตื่นตัวตามธรรมชาติสามชั่วโมง (W) (Cirelli, 2002)


การกระจายตัวของปัจจัยการถอดรหัส P-CREB ในบริเวณโคโรนัลของเยื่อหุ้มสมองข้างขม่อมของหนูหลังจากการนอนหลับสามชั่วโมง (S) และในกรณีของการอดนอนสามชั่วโมง (SD) (Cirelli, 2002)

การให้เหตุผลเกี่ยวกับบทบาทของการนอนหลับดังกล่าวเข้ากันได้ดีกับคุณลักษณะที่รู้จักกันดี - "ตอนเช้าฉลาดกว่าตอนเย็น" ในตอนเช้าเรามีความเข้าใจที่ดีขึ้นมากเกี่ยวกับสิ่งที่ไม่ชัดเจนเมื่อวานนี้ ทุกอย่างชัดเจนขึ้นและชัดเจนยิ่งขึ้น เป็นไปได้ว่าเราเป็นหนี้สิ่งนี้จากการล้างกลุ่มตัวรับขนาดใหญ่ที่เกิดขึ้นระหว่างการนอนหลับ สมมติฐานที่เป็นเท็จและน่าสงสัยจะถูกลบออกไป สมมติฐานที่เชื่อถือได้จะได้รับการรวมเข้าด้วยกัน และเริ่มมีส่วนร่วมในกระบวนการข้อมูลมากขึ้น

ในระหว่างการจำลอง เห็นได้ชัดว่าจำนวนสมมติฐานเท็จนั้นมากกว่าจำนวนจริงหลายพันเท่า เนื่องจากสามารถแยกแยะสิ่งหนึ่งออกจากอีกสิ่งหนึ่งตามเวลาและประสบการณ์เท่านั้น สมองจึงไม่มีทางเลือกนอกจากต้องสะสมข้อมูลทั้งหมดนี้โดยหวังว่าจะพบกรัมเรเดียมในนั้นเมื่อเวลาผ่านไป เมื่อได้รับประสบการณ์ใหม่ จำนวนกลุ่มที่มีสมมติฐานที่ต้องมีการทดสอบก็เพิ่มขึ้นอย่างต่อเนื่อง จำนวนคลัสเตอร์ที่เกิดขึ้นต่อวันและมีแร่ที่ยังไม่ได้ดำเนินการอาจเกินจำนวนคลัสเตอร์ที่รับผิดชอบในการเข้ารหัสประสบการณ์ที่พิสูจน์แล้วที่สะสมตลอดช่วงชีวิตก่อนหน้านี้ ทรัพยากรของสมองสำหรับจัดเก็บสมมติฐานดิบที่ต้องมีการทดสอบควรมีจำกัด ดูเหมือนว่าในช่วง 16 ชั่วโมงของการตื่นในเวลากลางวัน กลุ่มตัวรับจะเต็มพื้นที่ว่างเกือบทั้งหมด เมื่อช่วงเวลานี้มาถึง สมองเริ่มบังคับให้เราเข้าสู่โหมดสลีปเพื่อให้สมองทำการรวมตัวและพื้นที่ว่างที่ชัดเจน เห็นได้ชัดว่ากระบวนการเคลียร์ทั้งหมดใช้เวลาประมาณ 8 ชั่วโมง หากคุณปลุกเราให้ตื่นเร็วขึ้น กลุ่มบางส่วนจะยังคงไม่ได้รับการประมวลผล นี่คือจุดที่ปรากฏการณ์ความเหนื่อยล้าเกิดขึ้น หากคุณนอนหลับไม่เพียงพอเป็นเวลาหลายวัน คุณจะต้องชดเชยการนอนหลับที่สูญเสียไป มิฉะนั้นสมองจะเริ่ม "ฉุกเฉิน" ลบคลัสเตอร์ซึ่งไม่ได้นำไปสู่สิ่งที่ดีเนื่องจากจะทำให้เราไม่มีโอกาสได้รับความรู้จากประสบการณ์ที่ได้รับ หน่วยความจำเหตุการณ์มีแนวโน้มที่จะถูกรักษาไว้ แต่รูปแบบจะยังคงตรวจไม่พบ
อย่างไรก็ตาม คำแนะนำส่วนตัวของฉัน: อย่าละเลยการนอนหลับที่มีคุณภาพ โดยเฉพาะอย่างยิ่งหากคุณกำลังศึกษาอยู่ อย่าพยายามประหยัดเงินในการนอนหลับเพื่อให้คุณสามารถทำงานได้มากขึ้น การนอนหลับมีความสำคัญในการเรียนรู้ไม่น้อยไปกว่าการเข้าร่วมการบรรยายและการทบทวนเนื้อหา แบบฝึกหัดภาคปฏิบัติ- ไม่ใช่เพื่ออะไรเลยที่เด็ก ๆ ในช่วงเวลาของการพัฒนาที่มีการสะสมและสรุปข้อมูลมีการใช้งานมากที่สุดจะใช้เวลาส่วนใหญ่ในการนอนหลับ

ประสิทธิภาพของสมอง

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

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

  • ความหมาย
  • โครงข่ายประสาทเทียม
  • เซลล์ประสาท
  • จิตสำนึก
  • เพิ่มแท็ก

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

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

    1. มาเริ่มกันที่การเปิดตัว โปรแกรมไมโครซอฟต์ Excel ที่มีตารางที่เราต้องการ ต่อไป เราเลือกช่วงของเซลล์ที่ต้องการการประมวลผล เรากำลังพูดถึงความเหมือนกันของคอลัมน์และเซลล์ที่เป็นส่วนหนึ่งของตาราง หรือพื้นที่ต่างๆ ที่ไม่เกี่ยวข้องกันของตาราง
    2. ต่อไปเราต้องไปตามเส้นทางต่อไปนี้:
    1. โปรแกรมมีความสามารถที่หลากหลายโดยเฉพาะ: คุณสามารถเลือกไฮไลต์ของเซลล์ที่รวมอยู่ในส่วนที่เลือกได้ มีตัวเลือกในการเลือกพื้นหลังเติม (โปรแกรมมีโซลูชันสี 6 สี) แบบอักษรและกรอบตารางที่หลากหลาย คุณสามารถเลือก "รูปแบบที่กำหนดเอง" ซึ่งช่วยให้คุณสร้างเซลล์ในเวอร์ชันของคุณเองได้ หากต้องการยกเลิกการเลือกเซลล์ที่ตรงกันให้คลิกตกลง

    การใช้ฟังก์ชัน EQUALS

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

    วิดีโอ: การค้นหารายการที่ตรงกันใน Excel

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

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

    ทำไมเราถึงต้องการสิ่งนี้? - คุณถาม. ใช่เป็นเพราะ วีลุคอัพการค้นหาไม่ใช่คุณลักษณะการค้นหาเพียงอย่างเดียวใน Excel และข้อจำกัดหลายประการสามารถป้องกันไม่ให้คุณได้รับผลลัพธ์ที่คุณต้องการในหลาย ๆ สถานการณ์ ในทางกลับกันฟังก์ชั่น ดัชนีและ ค้นหา– มีความยืดหยุ่นมากขึ้นและมีคุณสมบัติมากมายที่ทำให้น่าดึงดูดยิ่งขึ้นเมื่อเปรียบเทียบกับ วีลุคอัพ.

    ข้อมูลพื้นฐานเกี่ยวกับ INDEX และ MATCH

    เนื่องจากจุดประสงค์ของบทช่วยสอนนี้คือเพื่อแสดงความสามารถของฟังก์ชันต่างๆ ดัชนีและ ค้นหาในการใช้การค้นหาแนวตั้งใน Excel เราจะไม่ยึดติดกับไวยากรณ์และแอปพลิเคชัน

    ให้เรานำเสนอขั้นต่ำที่จำเป็นในการทำความเข้าใจสาระสำคัญจากนั้นเราจะตรวจสอบตัวอย่างสูตรโดยละเอียดที่แสดงข้อดีของการใช้ ดัชนีและ ค้นหาแทน วีลุคอัพ.

    INDEX – ไวยากรณ์ของฟังก์ชันและการใช้งาน

    การทำงาน ดัชนี(INDEX) ใน Excel จะส่งกลับค่าจากอาร์เรย์ที่หมายเลขแถวและคอลัมน์ที่กำหนด ฟังก์ชันมีไวยากรณ์ดังนี้:


    อาร์กิวเมนต์แต่ละรายการมีคำอธิบายที่ง่ายมาก:

    • อาร์เรย์(array) คือช่วงของเซลล์ที่คุณต้องการแยกค่า
    • row_num(line_number) คือจำนวนบรรทัดในอาร์เรย์ที่คุณต้องการแยกค่า หากไม่ได้ระบุ แสดงว่าจำเป็นต้องมีอาร์กิวเมนต์ column_num(คอลัมน์_หมายเลข)
    • column_num(column_number) คือจำนวนคอลัมน์ในอาร์เรย์ที่คุณต้องการแยกค่า หากไม่ได้ระบุ แสดงว่าจำเป็นต้องมีอาร์กิวเมนต์ row_num(line_number)

    หากมีการระบุอาร์กิวเมนต์ทั้งสองฟังก์ชัน ดัชนีส่งกลับค่าจากเซลล์ที่จุดตัดของแถวและคอลัมน์ที่ระบุ

    ที่นี่ ตัวอย่างที่ง่ายที่สุดฟังก์ชั่น ดัชนี(ดัชนี):

    ดัชนี(A1:C10,2,3)
    =ดัชนี(A1:C10,2,3)

    สูตรค้นหาช่วง A1:C10และส่งกลับค่าของเซลล์ใน 2เส้นและ 3มคอลัมน์นั่นคือจากเซลล์ ค2.

    ง่ายมากใช่มั้ย? อย่างไรก็ตาม ในทางปฏิบัติ คุณไม่ทราบเสมอไปว่าคุณต้องการแถวและคอลัมน์ใด ดังนั้นคุณจึงต้องได้รับความช่วยเหลือจากฟังก์ชันนี้ ค้นหา.

    MATCH - ไวยากรณ์ของฟังก์ชันและการใช้งาน

    การทำงาน จับคู่(MATCH) ใน Excel ค้นหาค่าที่ระบุในช่วงของเซลล์และส่งกลับตำแหน่งสัมพัทธ์ของค่านั้นในช่วง

    เช่นถ้าอยู่ในช่วง บี1:บี3มีค่า New-York, Paris, London จากนั้นสูตรต่อไปนี้จะคืนค่าตัวเลข 3 เนื่องจาก “ลอนดอน” เป็นองค์ประกอบที่สามในรายการ

    แมทช์("ลอนดอน",B1:B3,0)
    =MATCH("ลอนดอน";B1:B3;0)

    การทำงาน จับคู่(MATCH) มีรูปแบบดังนี้:

    จับคู่(lookup_value,lookup_array,)
    MATCH(lookup_value, lookup_array, [ประเภทการจับคู่])

    • lookup_value(search_value) คือตัวเลขหรือข้อความที่คุณกำลังมองหา อาร์กิวเมนต์อาจเป็นค่า รวมถึงบูลีนหรือการอ้างอิงเซลล์ก็ได้
    • lookup_array(search_array) – ช่วงของเซลล์ที่เกิดการค้นหา
    • match_type(map_type) – อาร์กิวเมนต์นี้บอกฟังก์ชัน ค้นหาไม่ว่าคุณต้องการค้นหาการจับคู่แบบตรงทั้งหมดหรือโดยประมาณ:
      • 1 หรือ ไม่ได้ระบุ– หาค่าสูงสุดน้อยกว่าหรือเท่ากับค่าที่ต้องการ อาร์เรย์ที่กำลังดูจะต้องเรียงลำดับจากน้อยไปหามาก นั่นคือจากน้อยไปหามาก
      • 0 – ค้นหาค่าแรกเท่ากับค่าที่ต้องการ สำหรับการรวมกัน ดัชนี/ค้นหาคุณต้องมีการจับคู่แบบตรงทั้งหมดเสมอ ดังนั้นอาร์กิวเมนต์ที่สามของฟังก์ชัน ค้นหาจะต้องเท่ากัน 0 .
      • -1 – ค้นหาค่าที่น้อยที่สุดที่มากกว่าหรือเท่ากับค่าที่ค้นหา อาร์เรย์ที่กำลังดูจะต้องเรียงลำดับจากมากไปน้อยจากมากไปน้อย

    เมื่อมองแวบแรกประโยชน์ของฟังก์ชัน ค้นหาทำให้เกิดข้อสงสัย ใครบ้างที่ต้องรู้ตำแหน่งขององค์ประกอบในช่วง? เราต้องการทราบความหมายขององค์ประกอบนี้!

    เราขอเตือนคุณว่าตำแหน่งสัมพัทธ์ของค่าที่เรากำลังมองหา (เช่น หมายเลขแถวและ/หรือคอลัมน์) เป็นสิ่งที่เราต้องระบุสำหรับอาร์กิวเมนต์อย่างแน่นอน row_num(line_number) และ/หรือ column_numฟังก์ชัน (column_number) ดัชนี(ดัชนี). อย่างที่คุณจำได้ฟังก์ชั่น ดัชนีสามารถคืนค่าที่จุดตัดของแถวและคอลัมน์ที่กำหนดได้ แต่ไม่สามารถระบุได้ว่าแถวและคอลัมน์ใดที่เราสนใจ

    วิธีใช้ INDEX และ MATCH ใน Excel

    เมื่อคุณทราบข้อมูลพื้นฐานเกี่ยวกับฟังก์ชันทั้งสองนี้แล้ว ฉันเชื่อว่ามันเริ่มชัดเจนแล้วว่าฟังก์ชันเหล่านี้ทำงานอย่างไร ค้นหาและ ดัชนีสามารถทำงานร่วมกันได้ ค้นหากำหนดตำแหน่งสัมพัทธ์ของค่าการค้นหาในช่วงของเซลล์ที่กำหนด และ ดัชนีใช้ตัวเลขนั้น (หรือตัวเลข) และส่งกลับผลลัพธ์จากเซลล์ที่เกี่ยวข้อง

    ยังไม่ชัดเจนทั้งหมด? นำเสนอฟังก์ชันต่างๆ ดัชนีและ ค้นหาในรูปแบบนี้:

    ดัชนี(,(ตรงกัน ( ค่าการค้นหา,คอลัมน์ที่เรากำลังมองหา,0))
    =ดัชนี( คอลัมน์ที่เราแยกออกมา;(จับคู่( ค่าการค้นหา;คอลัมน์ที่เรากำลังมองหา;0))

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

    ลองหาจำนวนประชากรของเมืองหลวงแห่งหนึ่ง เช่น ประเทศญี่ปุ่น โดยใช้สูตรต่อไปนี้

    ดัชนี($D$2:$D$10,MATCH("ญี่ปุ่น",$B$2:$B$10,0))
    =INDEX($D$2:$D$10,MATCH("ญี่ปุ่น",$B$2:$B$10,0))

    ตอนนี้เรามาดูกันว่าแต่ละองค์ประกอบของสูตรนี้ทำหน้าที่อะไร:

    • การทำงาน จับคู่(MATCH) ค้นหาค่า “ญี่ปุ่น” ในคอลัมน์ บีและโดยเฉพาะในเซลล์ บี2:บี10และส่งกลับตัวเลข 3 เนื่องจาก “ญี่ปุ่น” อยู่ในอันดับที่สามของรายการ
    • การทำงาน ดัชนี(ดัชนี) การใช้งาน 3 สำหรับการโต้แย้ง row_num(row_number) ซึ่งระบุว่าควรส่งคืนค่าจากแถวใด เหล่านั้น. เราได้รับสูตรง่ายๆ:

      ดัชนี($D$2:$D$10,3)
      =ดัชนี($D$2:$D$10,3)

      สูตรบอกอะไรประมาณนี้: ดูในเซลล์จาก D2ก่อน D10และแยกค่าจากแถวที่สามซึ่งก็คือจากเซลล์ D4เนื่องจากการนับเริ่มจากบรรทัดที่สอง

    นี่คือผลลัพธ์ที่คุณได้รับใน Excel:

    สำคัญ! จำนวนแถวและคอลัมน์ในอาร์เรย์ที่ฟังก์ชันใช้ ดัชนี(INDEX) ต้องตรงกับค่าอาร์กิวเมนต์ row_num(line_number) และ column_numฟังก์ชัน (column_number) จับคู่(จับคู่). มิฉะนั้นผลลัพธ์ของสูตรจะผิดพลาด

    เดี๋ยวก่อนเดี๋ยวก่อน... ทำไมเราจะใช้ฟังก์ชันไม่ได้ วีลุคอัพ(วีพีอาร์)? มีประเด็นใดบ้างที่ต้องเสียเวลาลองคิดหาเขาวงกต? ค้นหาและ ดัชนี?

    VLOOKUP("ญี่ปุ่น",$B$2:$D$2,3)
    =VLOOKUP("ญี่ปุ่น",$B$2:$D$2,3)

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

    เหตุใด INDEX/MATCH จึงดีกว่า VLOOKUP

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

    4 ประโยชน์หลักของการใช้ MATCH/INDEX ใน Excel:

    1. ค้นหาจากขวาไปซ้ายดังที่ผู้ใช้ Excel ที่มีความสามารถทราบดีว่า วีลุคอัพมองไปทางซ้ายไม่ได้ ซึ่งหมายความว่าค่าที่ต้องการจะต้องอยู่ในคอลัมน์ซ้ายสุดของช่วงที่กำลังตรวจสอบ ในกรณีที่ ค้นหา/ดัชนีคอลัมน์การค้นหาสามารถอยู่ทางซ้ายหรือขวาของช่วงการค้นหาก็ได้ ตัวอย่าง: จะแสดงคุณลักษณะนี้ในการทำงาน

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

    เช่น หากคุณมีโต๊ะ A1:C10และคุณต้องการดึงข้อมูลจากคอลัมน์ บีจากนั้นคุณจะต้องตั้งค่า 2 สำหรับการโต้แย้ง col_index_numฟังก์ชัน (column_number) วีลุคอัพ, แบบนี้:

    VLOOKUP("ค่าการค้นหา",A1:C10,2)
    =VLOOKUP("ค่าการค้นหา";A1:C10;2)

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

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

    3. ไม่จำกัดขนาดของค่าที่ค้นหาโดยใช้ วีลุคอัพโปรดจำไว้ว่าความยาวของค่าที่ค้นหานั้นจำกัดไว้ที่ 255 อักขระ ไม่เช่นนั้นคุณอาจเสี่ยงที่จะได้รับข้อผิดพลาด #ค่า!(#ค่า!). ดังนั้น หากตารางมีแถวยาว วิธีแก้ปัญหาเดียวที่ใช้งานได้คือการใช้ ดัชนี/ค้นหา.

    สมมติว่าคุณใช้สูตรนี้กับ วีลุคอัพซึ่งค้นหาในเซลล์จาก B5ก่อน D10ค่าที่ระบุในเซลล์ A2:

    VLOOKUP(A2,B5:D10,3,เท็จ)
    =VLOOKUP(A2,B5:D10,3,FALSE)

    สูตรจะไม่ทำงานหากค่าในเซลล์เป็น A2ยาวกว่า 255 ตัวอักษร คุณต้องใช้สูตรที่คล้ายกันแทน ดัชนี/ค้นหา:

    ดัชนี(D5:D10,MATCH(TRUE,ดัชนี(B5:B10=A2,0),0))
    =INDEX(D5:D10,MATCH(TRUE,INDEX(B5:B10=A2,0),0))

    4. เพิ่มเติม ความเร็วสูงงาน.หากคุณทำงานกับตารางขนาดเล็ก ประสิทธิภาพของ Excel มักจะมองไม่เห็นความแตกต่างโดยเฉพาะใน เวอร์ชันล่าสุด- หากคุณทำงานกับตารางขนาดใหญ่ที่มีแถวหลายพันแถวและสูตรการค้นหาหลายร้อยสูตร Excel จะทำงานเร็วขึ้นมากหากคุณใช้ ค้นหาและ ดัชนีแทน วีลุคอัพ- โดยทั่วไปการเปลี่ยนนี้จะเพิ่มความเร็ว งานเอ็กเซลบน 13% .

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

    ในทางกลับกัน สูตรที่มีฟังก์ชัน ค้นหาและ ดัชนีเพียงทำการค้นหาและส่งกลับผลลัพธ์ ทำให้การทำงานที่คล้ายกันเร็วขึ้นอย่างเห็นได้ชัด

    INDEX และ MATCH - ตัวอย่างของสูตร

    ตอนนี้คุณเข้าใจเหตุผลที่คุณควรเรียนรู้ฟังก์ชันต่างๆ แล้ว ค้นหาและ ดัชนีมาดูส่วนที่สนุกกันดีกว่าว่าคุณจะสามารถนำความรู้เชิงทฤษฎีไปประยุกต์ใช้ในทางปฏิบัติได้อย่างไร

    วิธีค้นหาจากด้านซ้ายโดยใช้ MATCH และ INDEX

    หนังสือเรียนเล่มใดก็ได้ วีลุคอัพบอกว่าฟังก์ชั่นนี้ไม่สามารถมองไปทางซ้ายได้ เหล่านั้น. หากคอลัมน์ที่คุณกำลังดูไม่ใช่คอลัมน์ซ้ายสุดในช่วงการค้นหา ก็ไม่มีโอกาสที่จะได้รับ วีลุคอัพผลลัพธ์ที่ต้องการ

    ฟังก์ชั่น ค้นหาและ ดัชนี Excel มีความยืดหยุ่นมากกว่ามากและไม่สนใจว่าคอลัมน์ที่มีค่าที่คุณต้องการดึงข้อมูลจะอยู่ที่ใด ตัวอย่างเช่น กลับไปที่ตารางที่มีเมืองหลวงและประชากรของรัฐ คราวนี้เราจะเขียนสูตร ค้นหา/ดัชนีซึ่งจะแสดงให้เห็นว่าเมืองหลวงของรัสเซีย (มอสโก) ครอบครองสถานที่ใดในแง่ของจำนวนประชากร

    ดังที่คุณเห็นในรูปด้านล่าง สูตรนี้ทำงานได้อย่างสมบูรณ์แบบ:

    ดัชนี($A$2:$A$10,MATCH("รัสเซีย",$B$2:$B$10,0))

    ตอนนี้คุณไม่น่าจะมีปัญหาในการทำความเข้าใจวิธีการทำงานของสูตรนี้:

    • ก่อนอื่น เรามาลองใช้ฟังก์ชันกันก่อน จับคู่(MATCH) ซึ่งค้นหาตำแหน่งของ “รัสเซีย” ในรายการ:

      การแข่งขัน("รัสเซีย",$B$2:$B$10,0))
      =MATCH("รัสเซีย",$B$2:$B$10,0))

    • ถัดไป กำหนดช่วงสำหรับฟังก์ชัน ดัชนี(INDEX) ที่จะดึงค่าออกมา ในกรณีของเรามันเป็น A2:A10.
    • จากนั้นเรารวมทั้งสองส่วนเข้าด้วยกันแล้วได้สูตร:

      ดัชนี($A$2:$A$10;MATCH("รัสเซีย";$B$2:$B$10,0))
      =INDEX($A$2:$A$10,MATCH("รัสเซีย",$B$2:$B$10,0))

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

    การคำนวณโดยใช้ INDEX และ MATCH ใน Excel (AVERAGE, MAX, MIN)

    คุณสามารถลงทุนผู้อื่นได้ ฟังก์ชัน Excelวี ดัชนีและ ค้นหาตัวอย่างเช่น เพื่อค้นหาค่าต่ำสุด สูงสุด หรือใกล้เคียงกับค่าเฉลี่ยมากที่สุด ต่อไปนี้เป็นตัวเลือกหลายตัวเลือกสำหรับสูตรที่เกี่ยวข้องกับตารางจาก:

    1. สูงสุด(สูงสุด) สูตรค้นหาค่าสูงสุดในคอลัมน์ ดี บรรทัดเดียวกัน:

    ดัชนี($C$2:$C$10,MATCH(MAX($D$2:I$10),$D$2:D$10,0))
    =INDEX($C$2:$C$10,MATCH(MAX($D$2:I$10),$D$2:D$10,0))

    ผลลัพธ์: ปักกิ่ง

    2. นาที(นาที). สูตรค้นหาค่าต่ำสุดในคอลัมน์ ดีและส่งกลับค่าจากคอลัมน์ บรรทัดเดียวกัน:

    ดัชนี($C$2:$C$10,MATCH(MIN($D$2:I$10),$D$2:D$10,0))
    =INDEX($C$2:$C$10,MATCH(MIN($D$2:I$10),$D$2:D$10,0))

    ผลลัพธ์: ลิมา

    3. เฉลี่ย(เฉลี่ย). สูตรคำนวณค่าเฉลี่ยของช่วง D2:D10จากนั้นค้นหาค่าที่ใกล้เคียงที่สุดและส่งกลับค่าจากคอลัมน์ บรรทัดเดียวกัน:

    ดัชนี($C$2:$C$10,MATCH(เฉลี่ย($D$2:D$10),$D$2:D$10,1))
    =INDEX($C$2:$C$10,MATCH(เฉลี่ย($D$2:D$10),$D$2:D$10,1))

    ผลลัพธ์: มอสโก

    สิ่งที่ต้องจำเมื่อใช้ฟังก์ชัน AVERAGE กับ INDEX และ MATCH

    การใช้ฟังก์ชัน เฉลี่ยร่วมกับ ดัชนีและ ค้นหาเป็นอาร์กิวเมนต์ที่สามของฟังก์ชัน ค้นหาส่วนใหญ่คุณจะต้องระบุ 1 หรือ -1 ในกรณีที่คุณไม่แน่ใจว่าช่วงที่คุณกำลังดูมีค่าเท่ากับค่าเฉลี่ย หากคุณแน่ใจว่ามีค่าดังกล่าวอยู่ ให้ใส่ 0 เพื่อค้นหารายการที่ตรงกันทุกประการ

    • ถ้าจะบ่งบอก 1 ค่าในคอลัมน์การค้นหาควรเรียงลำดับจากน้อยไปมาก และสูตรจะส่งคืนค่าสูงสุดน้อยกว่าหรือเท่ากับค่าเฉลี่ย
    • ถ้าจะบ่งบอก -1 ค่าในคอลัมน์การค้นหาควรเรียงลำดับจากมากไปน้อยและการส่งคืนจะเป็น ค่าต่ำสุดมากกว่าหรือเท่ากับค่าเฉลี่ย

    ในตัวอย่างของเรา ค่าในคอลัมน์ ดีมีการเรียงลำดับจากน้อยไปหามาก ดังนั้นเราจึงใช้ประเภทการจัดเรียง 1 - สูตร ดัชนี/ค้นหาซีส่งคืน "มอสโก" เนื่องจากประชากรในเมืองมอสโกมีค่าน้อยกว่าค่าเฉลี่ยมากที่สุด (12,269,006)

    วิธีใช้ INDEX และ MATCH เพื่อค้นหาแถวและคอลัมน์ที่รู้จัก

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

    ในตัวอย่างนี้สูตร ดัชนี/ค้นหาจะคล้ายกับสูตรที่เราได้พูดคุยไปแล้วในบทเรียนนี้มากโดยมีข้อแตกต่างเพียงข้อเดียว เดาอันไหน?

    อย่างที่คุณจำได้ไวยากรณ์ของฟังก์ชัน ดัชนี(INDEX) อนุญาตให้มีสามอาร์กิวเมนต์:

    ดัชนี(อาร์เรย์,row_num,)
    INDEX(อาร์เรย์, row_number, [column_number])

    และฉันขอแสดงความยินดีกับพวกคุณที่เดาได้!

    เริ่มต้นด้วยการเขียนเทมเพลตสูตร ในการทำสิ่งนี้เรามาดูสูตรที่เราคุ้นเคยกันดีอยู่แล้ว ดัชนี/ค้นหาและเพิ่มฟังก์ชันอื่นลงไป ค้นหาซึ่งจะส่งคืนหมายเลขคอลัมน์

    INDEX(ตารางของคุณ ,(MATCH(, คอลัมน์ที่จะค้นหา,0)),(ตรงกับ(, เส้นที่จะค้นหา,0))
    =INDEX(ตารางของคุณ ,(MATCH( ค่าสำหรับการค้นหาแนวตั้ง,คอลัมน์ที่จะค้นหา,0)),(ตรงกับ( ค่าการค้นหาแนวนอน,เส้นที่จะค้นหา,0))

    โปรดทราบว่าสำหรับการค้นหาแบบสองมิติ คุณต้องระบุทั้งตารางในอาร์กิวเมนต์ อาร์เรย์ฟังก์ชัน (อาร์เรย์) ดัชนี(ดัชนี).

    ตอนนี้เรามาลองใช้รูปแบบนี้ในทางปฏิบัติ ด้านล่างนี้คุณจะเห็นรายชื่อประเทศที่มีประชากรมากที่สุดในโลก สมมติว่างานของเราคือค้นหาประชากรของสหรัฐอเมริกาในปี 2015

    เอาล่ะ มาเขียนสูตรกัน เมื่อฉันต้องการสร้างสูตรที่ซับซ้อนใน Excel ด้วยฟังก์ชันที่ซ้อนกัน ฉันจะเขียนฟังก์ชันที่ซ้อนกันแต่ละฟังก์ชันแยกกันก่อน

    เรามาเริ่มด้วยสองฟังก์ชันกันดีกว่า ค้นหาซึ่งจะส่งคืนหมายเลขแถวและคอลัมน์สำหรับฟังก์ชัน ดัชนี:

    • ตรงกับคอลัมน์– เรากำลังดูในคอลัมน์ บีหรือค่อนข้างอยู่ในช่วง บี2:บี11ค่าที่ระบุในเซลล์ H2(สหรัฐอเมริกา). ฟังก์ชั่นจะมีลักษณะดังนี้:

      ตรงกัน($H$2,$B$1:$B$11,0)
      =ตรงกัน($H$2,$B$1:$B$11,0)

      4 เนื่องจาก "USA" เป็นองค์ประกอบรายการที่ 4 ในคอลัมน์ บี(รวมถึงชื่อเรื่อง)

    • ตรงกับสตริง– เรากำลังมองหาค่าของเซลล์ H3(2558) ในบรรทัด 1 นั่นคือในเซลล์ A1:E1:

      ตรงกัน($H$3,$A$1:$E$1,0)
      =ตรงกัน($H$3,$A$1:$E$1,0)

      ผลลัพธ์ของสูตรนี้จะได้ 5 เนื่องจาก “2015” อยู่ในคอลัมน์ที่ 5

    ตอนนี้เราแทรกสูตรเหล่านี้ลงในฟังก์ชัน ดัชนีและ voila:

    ดัชนี($A$1:$E$11,MATCH($H$2,$B$1:$B$11,0),MATCH($H$3,$A$1:$E$1,0))
    =INDEX($A$1:$E$11,MATCH($H$2,$B$1:$B$11,0),MATCH($H$3,$A$1:$E$1,0))

    หากคุณเปลี่ยนฟังก์ชั่น ค้นหาขึ้นอยู่กับค่าที่ส่งคืน สูตรจะง่ายและเข้าใจได้:

    ดัชนี($A$1:$E$11,4,5))
    =ดัชนี($A$1:$E$11,4,5))

    สูตรนี้ส่งคืนค่าที่จุดตัด 4เส้นและ ที่ 5คอลัมน์ในช่วง A1:E11นั่นคือค่าของเซลล์ E4- แค่? ใช่!

    ค้นหาหลายเกณฑ์ด้วย INDEX และ MATCH

    ในบทช่วยสอนเรื่อง วีลุคอัพเราได้แสดงตัวอย่างของสูตรที่มีฟังก์ชัน วีลุคอัพเพื่อค้นหาโดยใช้หลายเกณฑ์ อย่างไรก็ตาม ข้อจำกัดที่สำคัญของโซลูชันนี้คือความจำเป็นในการเพิ่มคอลัมน์เสริม ข่าวดี: สูตร ดัชนี/ค้นหาสามารถค้นหาค่าต่างๆ ได้ใน 2 คอลัมน์ โดยไม่ต้องสร้างคอลัมน์ตัวช่วย!

    สมมติว่าเรามีรายการคำสั่งซื้อและเราต้องการค้นหาจำนวนเงินตามเกณฑ์สองข้อ - ชื่อผู้ซื้อ(ลูกค้า) และ ผลิตภัณฑ์(ผลิตภัณฑ์). เรื่องนี้มีความซับซ้อนเนื่องจากผู้ซื้อรายหนึ่งสามารถซื้อผลิตภัณฑ์ต่างๆ ได้หลายรายการในคราวเดียวและชื่อของผู้ซื้อในตารางบนแผ่นงาน ตารางการค้นหาจัดเรียงแบบสุ่ม

    นี่คือสูตร ดัชนี/ค้นหาแก้ปัญหา:

    (=INDEX("ตารางค้นหา"!$A$2:$C$13,MATCH(1,(A2="ตารางค้นหา"!$A$2:$A$13)*
    (B2="ตารางค้นหา"!$B$2:$B$13),0),3))
    (=INDEX("ตารางค้นหา"!$A$2:$C$13;MATCH(1,(A2="ตารางค้นหา"!$A$2:$A$13)*
    (B2="ตารางค้นหา"!$B$2:$B$13);0);3))

    สูตรนี้ซับซ้อนกว่าสูตรอื่นที่เราพูดถึงก่อนหน้านี้ แต่มีความรู้เกี่ยวกับฟังก์ชันต่างๆ ดัชนีและ ค้นหาคุณจะเอาชนะเธอ ส่วนที่ยากที่สุดคือฟังก์ชั่น ค้นหาฉันคิดว่ามันต้องอธิบายก่อน

    MATCH(1,(A2="ตารางค้นหา"!$A$2:$A$13),0)*(B2="ตารางค้นหา"!$B$2:$B$13)
    MATCH(1;(A2="ตารางค้นหา"!$A$2:$A$13);0)*(B2="ตารางค้นหา"!$B$2:$B$13)

    ในสูตรที่แสดงด้านบน ค่าที่เรากำลังมองหาคือ 1 และอาร์เรย์การค้นหาคือผลลัพธ์ของการคูณ โอเค เราควรคูณอะไร และเพราะเหตุใด? ลองดูทุกอย่างตามลำดับ:

    • รับค่าแรกในคอลัมน์ (ลูกค้า) บนแผ่นงาน โต๊ะหลักและเปรียบเทียบกับชื่อลูกค้าทั้งหมดในตารางบนแผ่นงาน ตารางการค้นหา(A2:A13)
    • หากพบรายการที่ตรงกัน สมการจะส่งกลับ 1 (จริง) และถ้าไม่ใช่ - 0 (โกหก).
    • ต่อไป เราทำเช่นเดียวกันกับค่าคอลัมน์ บี(ผลิตภัณฑ์).
    • จากนั้นเราจะคูณผลลัพธ์ที่ได้รับ (1 และ 0) เฉพาะในกรณีที่พบรายการที่ตรงกันในทั้งสองคอลัมน์ (เช่น เกณฑ์ทั้งสองเป็นจริง) คุณจะได้รับ 1 - หากเกณฑ์ทั้งสองเป็นเท็จ หรือมีเพียงข้อใดข้อหนึ่งที่ตรงตามเงื่อนไข คุณจะได้รับ 0 .

    ตอนนี้คุณเข้าใจแล้วว่าทำไมเราถึงถาม 1 , ค่าที่ต้องการคืออะไร? ถูกต้องแล้วที่ฟังก์ชั่น ค้นหาคืนตำแหน่งก็ต่อเมื่อตรงตามเกณฑ์ทั้งสองเท่านั้น

    บันทึก:ในกรณีนี้ คุณต้องใช้อาร์กิวเมนต์ทางเลือกที่สามของฟังก์ชัน ดัชนี- มีความจำเป็นเพราะว่า ในอาร์กิวเมนต์แรก เราระบุทั้งตาราง และต้องบอกฟังก์ชันว่าคอลัมน์ใดที่จะดึงค่าออกมา ในกรณีของเรานี่คือคอลัมน์ (ซำ) แล้วเราก็เข้าไป 3 .

    และสุดท้ายก็เพราะว่า เราจำเป็นต้องตรวจสอบทุกเซลล์ในอาร์เรย์ สูตรนี้ต้องเป็นสูตรอาร์เรย์ คุณสามารถดูสิ่งนี้ได้โดย วงเล็บปีกกาซึ่งได้แนบไว้ด้วย ดังนั้นเมื่อกรอกสูตรเสร็จแล้วอย่าลืมคลิก Ctrl+Shift+Enter.

    หากทุกอย่างถูกต้องจะได้ผลลัพธ์ตามภาพด้านล่าง:

    INDEX และ MATCH รวมกับ IFERROR ใน Excel

    ดังที่คุณคงสังเกตเห็นแล้ว (มากกว่าหนึ่งครั้ง) หากคุณป้อนค่าที่ไม่ถูกต้อง เช่น ค่าที่ไม่ได้อยู่ในอาร์เรย์ที่กำลังดูอยู่ สูตร ดัชนี/ค้นหารายงานข้อผิดพลาด #ไม่มี(#ไม่มี) หรือ #ค่า!(#ค่า!). หากคุณต้องการแทนที่ข้อความดังกล่าวด้วยข้อความที่เข้าใจได้ง่ายขึ้น คุณสามารถแทรกสูตรด้วยได้ ดัชนีและ ค้นหาเข้าไปในฟังก์ชัน การอ้างอิง.

    ไวยากรณ์ของฟังก์ชัน การอ้างอิงง่ายมาก:

    IFERROR(ค่า,value_if_error)
    IFERROR(ค่า,value_if_error)

    ข้อโต้แย้งอยู่ที่ไหน ค่า(value) คือค่าที่กำลังตรวจสอบข้อผิดพลาด (ในกรณีของเราคือผลลัพธ์ของสูตร ดัชนี/ค้นหา- และการโต้แย้ง value_if_error(value_if_error) คือค่าที่จะส่งคืนหากสูตรเกิดข้อผิดพลาด

    ตัวอย่างเช่น คุณสามารถแทรกลงในฟังก์ชันได้ การอ้างอิงแบบนี้:

    IFERROR(INDEX($A$1:$E$11,MATCH($G$2,$B$1:$B$11,0),MATCH($G$3,$A$1:$E$1,0)),
    "ไม่พบรายการที่ตรงกัน ลองอีกครั้ง!") =IFERROR(INDEX($A$1:$E$11,MATCH($G$2,$B$1:$B$11,0),MATCH($G$3,$A$1 : $อี$1;0));
    "ไม่พบรายการที่ตรงกัน ลองอีกครั้ง!")

    และตอนนี้ ถ้าใครป้อนค่าไม่ถูกต้อง สูตรจะให้ผลลัพธ์ดังนี้:

    หากคุณต้องการปล่อยเซลล์ว่างไว้ในกรณีที่เกิดข้อผิดพลาด คุณสามารถใช้เครื่องหมายคำพูด (“”) เป็นค่าของอาร์กิวเมนต์ที่สองของฟังก์ชัน การอ้างอิง- แบบนี้:

    IFERROR(INDEX(อาร์เรย์,MATCH(lookup_value,lookup_array,0),"")
    IFERROR(INDEX(อาร์เรย์,MATCH(lookup_value,looked_array,0),"")

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



    2024 wisemotors.ru. มันทำงานอย่างไร. เหล็ก. การทำเหมืองแร่ สกุลเงินดิจิทัล