“ มิติที่สี่” ทำงานกับอาร์เรย์ได้อย่างไร


30

นามธรรม:

ดังนั้นในขณะที่ฉันเข้าใจ (แม้ว่าฉันมีความเข้าใจที่ จำกัด มาก) มีสามมิติที่เรา (ปกติ) ทำงานร่วมกับร่างกาย:

วันที่ 1 จะแสดงเป็นเส้น
ที่สองจะถูกแทนด้วยตาราง
ก้อนที่ 3 จะถูกแทนด้วยคิวบ์

ง่ายพอจนกว่าเราจะได้รับการ4 - มันเป็นเรื่องยากนะที่จะวาดในพื้นที่ 3D ถ้าคุณรู้ว่าสิ่งที่ฉันหมายถึง ... บางคนบอกว่ามันมีสิ่งที่จะทำอย่างไรกับเวลา

คำถาม:

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

ฉันรู้ว่าคุณสามารถสร้างอาร์เรย์ 4D, 5D, 6D และอื่น ๆ ... ในภาษาการเขียนโปรแกรมที่แตกต่างกัน แต่ฉันต้องการที่จะรู้วิธีการทำงาน


66
หาก 3 มิติสามารถมองเห็นเป็นคิวบ์ดังนั้น 4 มิติสามารถมองเห็นได้เป็นกลุ่มของก้อนในบรรทัด 5 มิติสามารถมองเห็นเป็นกริดที่แต่ละเซลล์ในกริดประกอบด้วย ... คิวบ์! และอื่น ๆ ... "มิติที่สี่" ไม่มีส่วนเกี่ยวข้องกับเวลา (ไม่ว่าจะเป็นอะไร) เว้นแต่คุณจะนิยามไว้ในบริบทของความหมายของโปรแกรมของคุณ
FrustratedWithFormsDesigner

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


6
นอกจากความคิดเห็นของ Steve Evers ให้นึกถึงประเภทข้อมูลทั่วไป: สี RGB มีสามมิติดังนั้นคุณสามารถพิจารณา RGB "ขอบเขตสี" ตอนนี้เพิ่มองค์ประกอบอัลฟา คุณมีสี่มิติ
Josh Caswell

25
โปรดจำไว้ว่าคอมพิวเตอร์ไม่สนใจความคิดเรื่องมิติเชิงเรขาคณิตนั่นเป็นเพียงอุปกรณ์เพื่อความสะดวกของมนุษย์ หากคุณจัดสรรอาเรย์ 5x5x5x5 คอมพิวเตอร์จะทำการจัดสรรอาเรย์ 625 องค์ประกอบและคำนวณทางคณิตศาสตร์ตามดัชนีของคุณ
เดวิดจาง

คำตอบ:


77

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

(0) (1)

อาร์เรย์ขนาด 2x2 อาจเป็น:

(0,0) (0,1) (1,0) (1,1)

อาเรย์ 2x2x2 สามมิติอาจเป็น:

(0,0,0) (0,0,1) (0,1,0) (0,1,1) (1,0,0) (1,0,1) (1,1,0) (1,1,1)

คุณหวังว่าจะเห็นว่าสิ่งนี้เกิดขึ้น อาจมีสี่มิติ:

(0,0,0,0) (0,0,0,1) (0,0,1,0) (0,0,1,1) (0,1,0,0) (0,1,0,1) (0,1,1,0) (0,1,1,1)
(1,0,0,0) (1,0,0,1) (1,0,1,0) (1,0,1,1) (1,1,0,0) (1,1,0,1) (1,1,1,0) (1,1,1,1)

10
อาเรย์คอมพิวเตอร์ไม่ได้ถูก จำกัด โดยความเข้าใจของมนุษย์หรือการสร้างภาพ แต่พวกมันถูก จำกัด ด้วยข้อ จำกัด ทางกายภาพเช่นอาเรย์ของมิติแต่ละความยาว n จะใช้เวลา n ^ d หรือมากกว่าโดยทั่วไปที่มีขนาดความยาวแตกต่างกัน n1 × n2 × ... ครั้ง
acelent

6
@ColtonAllen: ฉันไม่แน่ใจว่าคุณหมายถึงอะไร ความหมายของมิติที่บอกว่า "พูดประมาณว่ามันคือจำนวนของพิกัดที่จำเป็นในการระบุจุดบนวัตถุที่." อาร์เรย์ที่ประกาศใน C int a[2][2][2];จะเป็นอาร์เรย์สามมิติ
Greg Hewgill

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

24
@ Manu343726 เขาอ้างถึงความจริงที่ว่าเราอาศัยอยู่ในมิติ (ตามหลักเหตุผล) จำกัด พื้นที่และเวลา แต่อาร์เรย์ในหน่วยความจำคอมพิวเตอร์มีขนาด "ทำเป็น" - ทั้งหมดถูกเก็บไว้ในพื้นที่ที่ต่อเนื่องเชิงเส้นในหน่วยความจำ - ดังนั้นพวกเขาจึงไม่ จำกัด จำนวนมิติที่เราอาศัยอยู่อย่าหมุนรอบ> :(
Blackhawk

15
@ Manu343726: ฉันอย่างกล่าวว่าโปรแกรมไม่คอมพิวเตอร์ นั่นเป็นหนึ่งในสิ่งที่ยอดเยี่ยมเกี่ยวกับซอฟต์แวร์
Greg Hewgill

49

คุณไม่จำเป็นต้องจินตนาการในมิติเชิงพื้นที่เพียงแค่คิดว่ามันเป็นใบเฟิร์น ใบเฟิร์น

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

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

leaf = 2;
tinyBranch = [leaf, leaf, leaf];
middleBranch = [tinyBranch, tinyBranch, tinyBranch];
bigBranch = [middleBranch, middleBranch, middleBranch];
mainBranch = [bigBranch, bigBranch, bigBranch];

1
การสร้างภาพข้อมูลนี้จะไม่แสดงอาร์เรย์ที่ขรุขระมากขึ้นหรือไม่
Matt Johnson-Pint

2
@ MattJohnson อย่างเป็นทางการใช่ แต่ตัวอย่างนี้จะอธิบาย / เห็นภาพอาร์เรย์หลายมิติเช่นกัน
M.Mimpen

4
+1 สิ่งนี้ไม่เพียง แต่จะสร้างภาพข้อมูลให้เป็นระเบียบเท่านั้น แต่ยังใกล้เคียงกับความจริงมากกว่าคำอธิบายเชิงเส้นสำหรับการใช้งานอาร์เรย์จำนวนมาก ไม่ว่าคนส่วนใหญ่ที่นี่จะ จำกัด คำว่า "อาเรย์" กับความทรงจำที่ต่อเนื่องกันหรือไม่ " อาเรย์หลายมิติ" เป็นคำที่ใช้สำหรับการเตรียมการดังกล่าวในวรรณคดีสำหรับหลายภาษา
DeveloperInDevelopment

46

มิติเป็นสิ่งที่คุณต้องการมิติที่ 4 ไม่จำเป็นต้องเป็นเวลา หากคุณคิดว่าสามมิติเป็นลูกบาศก์คุณสามารถคิด 4 มิติเป็นหนึ่งลูกบาศก์ 5 มิติตารางของคิวบ์และอื่น ๆ

คุณสามารถมีคอลเล็กชั่น 3 มิติของ voxels ด้วยมิติที่ 4 เป็นสีหรือความหนาแน่นหรือคุณสมบัติอื่น ๆ

เมื่อคุณจัดสรรหน่วยความจำสำหรับอาร์เรย์หลายมิติของคุณเพียงจัดสรรผลิตภัณฑ์ของแต่ละมิติสูงสุดสำหรับชนิดข้อมูลของคุณ หากคุณมีอาร์เรย์ 3 มิติหรือ 'คิวบ์' ของ 10 องค์ประกอบในแต่ละมิติคุณจะมี 1,000 องค์ประกอบที่จัดสรร หากคุณสร้างอาร์เรย์ 4d ที่มี 10 องค์ประกอบในมิติที่ 4 คอมพิวเตอร์จะจัดสรร 10,000 ชนถึง 5 มิติและจะจัดสรร 100,000

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


26

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

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

อาเรย์แน่นอน มันจะมีลักษณะเช่นนี้ (ใช้ pseudocode ทั่วไปที่ทำขึ้น):

npatients = 7
nsensors = 4     // number of sensors on an arm
nchannels = 3
nsamples = 60.0 / 0.1
sensordata = Array[ npatients, nsensors, 2, nchannels, nsamples ]

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

x = sensordata[6, 5, 1, 2, 338)

มันเหมือนกับการสืบค้นฐานข้อมูลเชิงสัมพันธ์ที่คุณมีการบันทึกสำหรับแต่ละค่าข้อมูลโดยมีห้าคอลัมน์ที่มี id ผู้ป่วย, id เซ็นเซอร์และอื่น ๆ และคอลัมน์ที่มีค่า ในการรับจุดข้อมูลหนึ่งจุดคุณใช้ห้าคำศัพท์ใน WHERE: SELECT value จาก SensorData WHERE (patientid = 6) และ (sensorid = 5) และ (arm = "left") และ (channel = "midfreq") และ (sampleindex = 338 )

ไม่มีอะไรลึกลับเกี่ยวกับตารางฐานข้อมูลที่มีห้าคอลัมน์ขึ้นไปใช่ไหม?

(ฉันใช้การจัดทำดัชนีแบบพื้นฐาน 1 ตัว แต่ในชีวิตจริงการทำดัชนีด้วย 0 นั้นเป็นเรื่องธรรมดามาก)

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


3
+1 ตัวอย่างที่ยอดเยี่ยมแสดงให้เห็นว่าส่วนข้อมูลสามารถเป็นข้อมูลใด ๆ ที่คุณต้องการ
ไมค์สนับสนุนโมนิก้า

20

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


5
ใช่โปรดจำไว้ว่าเมื่อคุณเพิ่มมิติข้อมูลเพิ่มเติมลงในอาร์เรย์ของคุณ การใช้หน่วยความจำอาจไม่สำคัญ
davidhaskins

18

... หรือฉันจะถามมันใน MathSO ...

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

ด้วยการชี้แจงที่ชัดเจนเรามาคุยกันเรื่องอาร์เรย์ - คุณไม่จำเป็นต้องเข้าใจช่องว่างแบบเวกเตอร์เนื่องจากคำจำกัดความที่เป็นนามธรรมนั้นง่ายกว่ามาก

อัน ( 0 × 1 × 2 × ... × n -1 ) อาร์เรย์ -sized (เช่นมิติn ) เป็นเพียงคอลเลกชันของ01 ⋅ ... ⋅ n -1ตัวเลข ( หรือวัตถุชนิดใดก็เติมอาร์เรย์) ความแตกต่างเพียงอย่างเดียวกับอาเรย์หนึ่งมิติของความยาวนั้นคือคุณมีวิธีที่มีประโยชน์ในการทำดัชนีมิติแยกกันคือ

i lin = i n −1 + n −1 ⋅ ( ฉันn −2 + n −1 ⋅ (... 2 ⋅ ( i 1 + 1i 0 ) ... ))


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

@Scott: ฉันเห็นด้วยกับความคิดของ "มิติของอาเรย์" เป็นโชคร้ายเพราะมันหมายถึงบางสิ่งที่ไม่เกี่ยวข้องกับมิติของพื้นที่ซึ่งเวกเตอร์ที่คุณอาจเป็นตัวแทนของอาร์เรย์ ( แต่ผมยังคิดว่ามันไม่ได้เป็นเช่นความคิดที่ดีที่จะเป็นตัวแทนของเวกเตอร์โดยธรรมดาอาร์เรย์ unabstracted ในสถานที่แรก.) ชื่อที่ดีกว่าอาจจะมีการจัดอันดับของอาร์เรย์ในเปรียบเทียบกับเทนเซอร์
leftaroundabout

13

ในการเขียนโปรแกรมอาร์เรย์นั้นค่อนข้างใช้งานง่าย แต่อาจจะไม่เข้าใจ

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

  • int x[4]4 intบล็อกแต่ละของพวกเขาที่มี
  • int x[5][4]5 int[4]บล็อกแต่ละของพวกเขาที่มี
  • int x[3][5][4]3 int[5][4]บล็อกแต่ละของพวกเขาที่มี
  • int x[2][3][5][4]มี 2 int[3][5][4]ช่วงตึกแต่ละของพวกเขาที่มี

วิธีที่คุณอ้างถึงพวกเขานั้นขึ้นอยู่กับคุณ แต่เพื่อความเข้าใจที่ดีขึ้นคุณมีบางสิ่งที่เหมือนกัน

  • COLUMN สำหรับอันสุดท้าย
  • ROW สำหรับคนที่สองที่ผ่านมา
  • PAGE สำหรับอันที่สาม - สุดท้าย

จนถึงตอนนี้ฉันอ่านมันที่ไหนสักแห่ง เพื่อที่จะอยู่ที่นี่เราสามารถกำหนด

  • BOOK สำหรับหนึ่งในสี่สุดท้าย
  • และอาจSHELFเป็นครั้งสุดท้ายที่ห้า (หรือถ้าคุณต้องการSHELFROWเพื่อให้เราสามารถดำเนินการต่อ)

ที่กล่าวว่าฉันไม่เคยเห็นอาร์เรย์ที่มีมากกว่า 4 หรือ 5 มิติใน "ชีวิตป่า"

ด้วยวิธีนี้คุณสามารถกำหนดและจินตนาการint x[6][2][3][5][4]เป็นคอลเลกชันขนาด 6 "ชั้นวาง" แต่ละเล่มมี 2 เล่มแต่ละเล่มมี 3 หน้าแต่ละแถวมี 5 แถวแต่ละแถวมี 4 คอลัมน์


13

ลองนึกถึงอาเรย์หนึ่งมิติเหมือนลิ้นชัก

ลิ้นชัก

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

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

ดังนั้นคุณสามารถพูดอะไรเช่น "เปิดลิ้นชักด้านบนของลิ้นชักแรกดึงลิ้นชักออกจากลิ้นชักนั้นจากนั้นเปิดลิ้นชักด้านล่างของลิ้นชักที่สอง" นั่นจะเหมือนกับการเข้าถึงดัชนีของอาร์เรย์ 2 มิติ: myArray [0] [3];

และแน่นอนว่าตู้ลิ้นชักภายในลิ้นชักส่วนนอกสุดนั้นสามารถมีลิ้นชักได้ นั่นคืออาร์เรย์สามมิติ

ดังนั้นคำถามของคุณคืออาร์เรย์สี่มิติคืออะไร มันเป็นตู้ลิ้นชักลิ้นชักตู้ลิ้นชักตู้ลิ้นชักแน่นอน!

มันเป็นลิ้นชักตลอดทาง


4
มันเป็นทรวงอกของลิ้นชักตลอดทาง
Thomas Eding

8
และในลิ้นชักสุดท้าย? เต่า
Kevin Workman

เป็นคนอวดรู้เล็กน้อย ป.ร. ให้ไว้มี 3 ลิ้นชักแต่ละหน้าอก (ขึ้นอยู่กับภาพ) ไม่ 4 และคุณกำลังใช้ฐานดัชนี 0, ลิ้นชักด้านล่างจะเป็น 2 ไม่ได้ 3. ดังนั้นแทนที่จะมันจะเป็นmyArray[0][3] myArray[0][2]แต่คำอธิบายที่ดีเป็นอย่างอื่น
Tom Heard

@ TomHeard ลิ้นชักแรกของลิ้นชักมี 3 ลิ้นชัก แต่ลิ้นชักภายในลิ้นชักแรกมี 4 ลิ้นชัก ดุจ! : p
Kevin Workman

1
โอ้ถ้าอย่างนั้นก็โอเค = D
Tom Heard

5

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

  • ความถี่ - สีหรือระดับเสียง
  • มวล
  • ความจุ
  • สี (ขึ้นควาร์กลงควาร์กควาร์กแปลกควาร์กเสน่ห์ ฯลฯ )
  • ทิศทางการหมุน
  • มุม
  • เสียงดัง
  • ความร้อน (ของพริก)

มิติ "สี่" เป็นเพียงสี่เพราะมีมิติสามมิติ อวกาศและเวลามีขนาดใหญ่มากเพราะพวกเขามีขนาดใหญ่ มากในหน้าของคุณ แต่คุณภาพเชิงปริมาณที่วัดได้ใด ๆ อาจเป็นมิติถ้าคุณวัด

ตัวอย่างเช่นบราเซียร์มีสามมิติ: ขนาดถ้วยขนาดหน้าอกและสิ่งของคั่นระหว่างหน้า (ฉันไม่รู้ว่าคุณสาว ๆ เรียกมันว่าอะไร แต่ฉันหมายถึงระยะห่างระหว่างถ้วย)


1
"ไม่ใช่มิติข้อมูลทุกมิติ" สำหรับอาร์เรย์มิติทั้งหมดเป็นมิติ
Rhymoid

2
@Rymymoid: สำหรับอาร์เรย์ไม่มีมิติใดที่สัมพันธ์กับอวกาศอย่างที่เราคิดเกี่ยวกับอวกาศ : P เรากำหนดให้พวกเขาเป็นตัวแทนสิ่งที่เราต้องการ
cHao

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

@ Rhymoid: นั่นเป็นกระบวนการคิดเดียวกับที่นำไปสู่คำถามนี้ที่ถูกถามตั้งแต่แรก มิติที่นับได้ไม่ได้ทำให้เกิดมิติ การนำไปใช้งานตามจริงไม่มีที่ว่าง มีหน่วยความจำเท่านั้นและหน่วยความจำมีมิติเดียวเท่าที่โปรแกรมรู้ / เห็น / ใส่ใจ
cHao

@cHao: การใช้งานตามลำดับมีพื้นที่เพราะยังมีเวลา คำว่า 'ช่องว่างรั่วไหล' (เป็นทางเลือกสำหรับ 'หน่วยความจำรั่ว' ที่พบในชุมชน Haskell) ไม่มีเหตุบังเอิญ ความจริงที่ว่าหน่วยความจำถูกอธิบายว่าเป็นหนึ่งมิตินั้นเป็นมรดกจาก BCPL
Rhymoid

4

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

เมื่อต้องรับมือกับอาร์เรย์ จำกัด มันเป็นเรื่องง่ายที่จะหาพื้นที่

ลองนึกภาพแผ่นกระดาษที่มีตารางพิมพ์อยู่ คุณสามารถเขียนข้อมูลบางอย่างในแต่ละเซลล์ของตาราง นั่นคืออาร์เรย์ 2 มิติ: แถวและคอลัมน์

ใส่กระดาษเหล่านั้นหลายแผ่นลงในโฟลเดอร์แฟ้ม นั่นคืออาร์เรย์ 3 มิติ: หน้า, แถวและคอลัมน์

วางหลายโฟลเดอร์เหล่านั้นในกล่องไฟล์ อาร์เรย์ 4 มิติ: โฟลเดอร์, หน้า, แถว, คอลัมน์

จัดเรียงกล่องในตารางสี่เหลี่ยมบนพาเลทไม้ 6D array: กล่องแถว, คอลัมน์, โฟลเดอร์, หน้า, แถว, คอลัมน์

วางซ้อนกริดของกล่องเพิ่มเติมที่ด้านบนของกล่องเหล่านั้น 7D array: ความลึกของกล่อง, แถวกล่อง, คอลัมน์, โฟลเดอร์, หน้า, แถว, คอลัมน์

เริ่มยัดอัดพาเลทลงในคอนเทนเนอร์ขนส่ง: อาร์เรย์ 9D (สมมติว่าแต่ละสแต็กสูงเท่ากับด้านในของคอนเทนเนอร์ดังนั้นคุณจะได้มิติที่ 2 เพิ่มเติมที่นี่)

กองซ้อนคอนเทนเนอร์ขนส่งบนดาดฟ้าของเรือคอนเทนเนอร์: อาร์เรย์ 12D

กองเรือคอนเทนเนอร์ของคุณตอนนี้เป็นอาร์เรย์ 13D


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

3

ในระบบพิกัดคาร์ทีเซียนคุณมีแกน x และ y บนระนาบ คุณสามารถแสดงตัวเลขใด ๆ บนเครื่องบินเป็น (x, y)

ในสาม - "ช่องว่าง" (หรือที่รู้จักกันในชื่อลูกบาศก์) คุณสามารถมีแกน x, y และ z คุณสามารถแสดงองค์ประกอบใด ๆ ของลูกบาศก์เป็น (x, y, z)

ในพื้นที่หลายตัวแปรคุณสามารถมีแกน x, y, z และ, w (โดยที่แกน w คือ "จินตภาพ") คุณสามารถแสดงองค์ประกอบใด ๆ ของพื้นที่นั้นเป็น (x, y, z, w)

จุดเหล่านี้ทั้งหมดในอวกาศแสดงด้วยเวกเตอร์ ในสี่ช่องว่างคุณสามารถมีสองเวกเตอร์โดยที่v1 = (x1, y1, z1, w1) และv2 = (x2, y2, z2, w2) จากนั้นคุณจัดการเวกเตอร์เหล่านี้ตามที่คุณต้องการตัวเลข ตัวอย่างเช่นผลรวมของเวกเตอร์สองตัวคือv1 + v2จะเป็น (x1, y1, z1, w1) + (x2, y2, z2, w2) จากนั้นคุณเพิ่มเทอมเวกเตอร์เหล่านี้ตามเทอมตามที่คุณต้องการเพื่อรับ: (x1 + x2, y1 + y2, z1 + z2, w1 + w2)

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

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