Abstrak:
Jadi, seperti yang saya pahami (walaupun saya memiliki pemahaman yang sangat terbatas), ada tiga dimensi yang kami (biasanya) kerjakan secara fisik:
Yang pertama akan diwakili oleh garis.
Yang ke-2 akan diwakili oleh kotak.
Yang ke-3 akan diwakili oleh kubus.
Cukup sederhana sampai kita sampai ke 4 - Agak sulit untuk menggambar dalam ruang 3D, jika Anda tahu apa yang saya maksud ... Beberapa orang mengatakan itu ada hubungannya dengan waktu .
Pertanyaan:
Sekarang, meskipun itu tidak masuk akal, itu semua baik bagi saya. Pertanyaan saya bukan tentang ini, atau saya akan menanyakannya pada MathSO atau PhysicsSO. Pertanyaan saya adalah: Bagaimana komputer menangani ini dengan array?
Saya tahu bahwa Anda dapat membuat array 4D, 5D, 6D, dll ... dalam banyak bahasa pemrograman yang berbeda, tetapi saya ingin tahu cara kerjanya.
Jawaban:
Untungnya, program tidak dibatasi oleh kendala fisik dari dunia nyata. Array tidak disimpan dalam ruang fisik, sehingga jumlah dimensi array tidak masalah. Mereka diratakan menjadi memori linier. Misalnya, array dimensi tunggal dengan dua elemen dapat ditata sebagai:
Array 2x2 mungkin menjadi:
Array 2x2x2 tiga dimensi mungkin:
Semoga Anda bisa melihat ke mana arah ini. Empat dimensi mungkin:
sumber
int a[2][2][2];
array 3 dimensi.Anda tidak perlu membayangkan dalam dimensi spasial yang tinggi, anggap saja sebagai daun pakis.
Tangkai utama adalah larik pertama Anda, dengan setiap cabang menjadi item yang disimpannya. Jika kami melihat cabang, ini adalah dimensi kedua Anda. Ini memiliki struktur serupa cabang yang lebih kecil yang datang mewakili data. Ini pada gilirannya memiliki cabang kecil mereka sendiri yang berlanjut sampai kita sampai pada daun kecil yang mewakili data dari array dimensi paling dalam atau tertinggi.
Anda dapat melihat bangunan ini jika Anda mendeklarasikan setiap level dengan namanya sendiri. Di sini saya menggunakan kembali setiap variabel level untuk meminimalkan kode:
sumber
Dimensinya adalah apa pun yang Anda inginkan, dimensi ke-4 tidak harus berupa waktu. Jika Anda menganggap tiga dimensi sebagai kubus, Anda dapat menganggap 4 dimensi sebagai deretan kubus. 5 dimensi, kotak kubus, dan sebagainya.
Anda juga bisa memiliki koleksi voxel 3d, dengan dimensi ke-4 berupa warna, atau kepadatan, atau properti lainnya.
Ketika Anda mengalokasikan memori untuk array multidimensi Anda, itu hanya cukup mengalokasikan produk dari setiap dimensi maksimum untuk tipe data Anda. Jika Anda memiliki larik 3d atau 'kubus' dari 10 elemen di setiap dimensi, Anda akan memiliki 1.000 elemen yang dialokasikan. Jika Anda membuat array 4d dengan 10 elemen di dimensi 4, komputer hanya akan mengalokasikan 10.000. Bump hingga 5 dimensi, dan akan mengalokasikan 100.000.
Komputer tidak peduli tentang makna apa pun tentang apa yang masing-masing dimensi wakili. Untuk memilih di mana dalam daftar elemen satu titik, itu hanya perkalian untuk memilih alamat memori.
sumber
Bayangkan melakukan R&D pada beberapa perangkat medis baru, serangkaian sensor yang Anda letakkan di lengan pasien. Anda memiliki tujuh sukarelawan yang disiapkan untuk pengujian. Setiap sensor melaporkan pembacaan frekuensi rendah, frekuensi menengah, dan frekuensi tinggi, yang Anda ambil sekali setiap 100 ms selama sekitar satu menit.
Bagaimana cara menyimpan semua data dalam memori untuk analisis dan perencanaan?
Jelas sebuah array. Akan terlihat seperti ini (menggunakan pseudocode generik buatan):
Itu array lima dimensi, dan tidak ada yang rumit, misterius atau membingungkan tentang hal itu. Tidak ada alasan untuk mencoba menghubungkannya dengan ruang Euclidean 5 dimensi. Untuk mendapatkan nilai satu data, kami menggunakan ekspresi seperti
Itu seperti menanyakan basis data relasional di mana Anda memiliki catatan untuk setiap nilai data, dengan lima kolom memegang id pasien, id sensor dan sebagainya, dan sebuah kolom dengan nilai. Untuk mendapatkan satu titik data, Anda menggunakan lima istilah di WHERE: SELECT value FROM SensorData WHERE (patientid = 6) dan (sensorid = 5) dan (arm = "left") dan (channel = "midfreq") dan (sampleindex = 338 ).
Tidak ada yang mistis tentang tabel database dengan lima kolom atau lebih, kan?
(Saya menggunakan pengindeksan berbasis 1 meskipun dalam kehidupan nyata, berbasis 0 jauh lebih umum.)
Perhatikan bahwa saya adalah anak nakal karena sulit mengkodekan jumlah lengan. Jika saya pernah diberi dana untuk menyelidiki sensor ini pada gurita, saya dalam kesulitan!
sumber
Array hanya blok memori kontinu. Pengalamatan memori satu dimensi, Anda bisa maju atau mundur. Jadi dengan asumsi Anda memiliki array dengan 5 elemen, 5 blok memori akan dicadangkan. Jika Anda memiliki larik 2 dimensi dengan 5 elemen di setiap dimensi, 25 blok memori akan dicadangkan.
sumber
Sebenarnya, ahli matematika tidak akan pernah (atau paling tidak biasanya) mengasosiasikan dimensi keempat dengan sesuatu seperti waktu. Mereka juga tidak akan mengaitkan tiga yang pertama dengan ruang apa pun seperti: matematikawan hanya mendefinisikan dimensi sebagai properti abstrak, biasanya, ruang vektor (sering ini akan digeneralisasi ke manifold atau bahkan ruang metrik ). Dan definisi abstrak ini tidak peduli berapa banyak dimensi ruang fisik yang kita miliki. Konsep dimensi berlaku untuk ruang yang bahkan tidak menyerupai ruang fisik. Bahkan matematikawan (dan memang fisikawan) sangat sering menggunakan dimensi tak terbatas ruang, seperti ruang Hilbert mekanika kuantum.
Dengan klarifikasi itu, mari kita bicara array - Anda tidak perlu memahami ruang vektor, karena definisi abstrak sebenarnya jauh lebih sederhana di sini.
Sebuah array berukuran ℓ 0 × ℓ 1 × ℓ 2 × ... × ℓ n −1 ) (yaitu dimensi n ) hanyalah kumpulan dari ℓ 0 ⋅ ℓ 1 ⋅ ... ⋅ ℓ n −1 angka ( atau apa pun jenis objek yang mengisi array). Satu-satunya perbedaan untuk array satu dimensi dari panjang itu adalah bahwa Anda memiliki cara berguna khusus untuk mengindeks dimensi secara terpisah, yaitu
i lin = i n −1 + ℓ n −1 ⋅ ( i n −2 + ℓ n −1 ⋅ (... ℓ 2 ⋅ ( i 1 + ℓ 1 ⋅ i 0 ) ...))
sumber
imshow
dengan Python) - dapat menampilkan dua dimensi spasial serta dimensi warna ketiga.Dalam pemrograman, array cukup mudah diimplementasikan, tetapi mungkin tidak dimengerti.
Secara umum, setiap level array berarti memiliki konten
n
-fold. Itu berartiint x[4]
adalah 4 blok, masing-masing berisiint
.int x[5][4]
5 blok, masing - masing berisiint[4]
.int x[3][5][4]
3 blok, masing-masing berisiint[5][4]
.int x[2][3][5][4]
adalah 2 blok, masing-masing berisiint[3][5][4]
.Bagaimana Anda merujuk mereka terserah Anda, tetapi untuk pemahaman yang lebih baik, Anda memiliki sesuatu seperti
COLUMN
untuk yang terakhirROW
untuk yang kedua terakhirPAGE
untuk yang ketiga terakhirSampai di sini, saya membacanya di suatu tempat. Agar tetap di sini, kita juga bisa mendefinisikan
BOOK
untuk yang keempat terakhirSHELF
untuk yang kelima terakhir. (Atau, jika Anda mau,SHELFROW
sehingga kami dapat melanjutkan.)Yang mengatakan, saya tidak pernah melihat array dengan lebih dari 4 atau mungkin 5 dimensi dalam "kehidupan liar".
Dengan cara ini, Anda dapat mendefinisikan dan membayangkan
int x[6][2][3][5][4]
sebagai koleksi 6 "rak", masing-masing memiliki 2 buku, masing-masing memiliki 3 halaman, masing-masing memiliki 5 baris, masing-masing memiliki 4 kolom.sumber
Pikirkan array satu dimensi seperti lemari laci:
Setiap laci adalah indeks dari array. Anda dapat meletakkan apa pun yang Anda inginkan di setiap laci, dan untuk banyak tujuan, setiap laci hanya akan berisi satu item (itu adalah array satu dimensi).
Lemari laci ini sangat ajaib, jadi tidak dibatasi oleh ruang fisik. Itu berarti bahwa Anda dapat meletakkan lemari berlaci lain di dalam setiap laci lemari laci pertama. Dada bagian dalam laci kemudian dapat berisi apa pun yang Anda inginkan. Itu array dua dimensi.
Jadi Anda bisa mengatakan sesuatu seperti "buka laci atas laci pertama, keluarkan laci itu dari laci itu, lalu buka laci bawah laci kedua lemari itu". Itu akan seperti mengakses indeks array 2D: myArray [0] [3];
Dan tentu saja, peti laci di dalam laci paling luar bisa berisi peti laci. Itu array tiga dimensi.
Jadi, pertanyaan Anda adalah: apa array empat dimensi? Ini peti laci peti laci peti laci, tentu saja!
Laci semua jalan ke bawah.
sumber
myArray[0][3]
itumyArray[0][2]
. Namun sebaliknya penjelasannya bagus.Sebagian besar aspek dari pertanyaan ini telah dipertimbangkan, tetapi saya pikir itu akan membantu jika Anda mempertimbangkan sifat dimensi. Tidak semua dimensi bersifat spasial. Dimensi adalah konteks untuk pengukuran. Berikut ini beberapa contohnya:
Dimensi "keempat" hanya keempat karena ada tiga dimensi spasial. Ruang dan waktu tampak besar karena, ya, mereka tampak besar. Sangat banyak di wajahmu. Tetapi kualitas terukur dan terukur apa pun bisa menjadi dimensi jika Anda mengukurnya.
Sebagai contoh, bra memiliki tiga dimensi: ukuran cangkir, ukuran dada, dan pengantara (saya tidak tahu apa yang kalian sebut, tapi maksud saya jarak antar cangkir).
sumber
Dalam fisika, kita menganggap setiap dimensi spasial menjadi tak terbatas, yang membuat sulit menemukan ruang untuk dimensi baru.
Saat berhadapan dengan array terbatas, mudah untuk menemukan ruang.
Bayangkan selembar kertas dengan kisi dicetak di atasnya; Anda dapat menulis beberapa informasi di setiap sel grid. Itu array 2D: baris dan kolom.
Masukkan beberapa lembar kertas ke dalam folder file; itu array 3D: halaman, baris, dan kolom.
Taruh beberapa folder itu di kotak file. 4D array: folder, halaman, baris, kolom.
Susun kotak-kotak dalam kotak persegi panjang di atas palet kayu. 6D array: kotak-baris, kotak-kolom, folder, halaman, baris, kolom.
Susun lebih banyak kisi-kisi kotak di atasnya. 7D array: kedalaman kotak, baris-kotak, kolom-kotak, folder, halaman, baris, kolom.
Mulai menjejalkan palet ke dalam wadah pengiriman: array 9D. (Dengan asumsi setiap tumpukan setinggi bagian dalam wadah, sehingga Anda hanya bisa mendapatkan 2 dimensi lagi di sini.)
Menumpuk kontainer pengiriman di dek kapal kontainer: 12D array.
Armada kapal kontainer Anda sekarang merupakan array 13D.
sumber
Dalam sistem koordinat Cartesian, Anda memiliki sumbu x dan y di pesawat. Anda dapat mewakili angka apa pun di pesawat sebagai (x, y).
Dalam tiga "ruang" (atau dikenal sebagai kubus), Anda dapat memiliki sumbu x, y, dan z. Anda bisa mewakili elemen kubus apa pun sebagai (x, y, z).
Dalam ruang multivarian, Anda dapat memiliki sumbu x, y, z dan, w (di mana sumbu w adalah "imajiner"). Anda dapat mewakili elemen apa pun dari ruang itu sebagai (x, y, z, w).
Semua titik di ruang ini dilambangkan dengan vektor. Dalam empat spasi, Anda dapat memiliki dua vektor, di mana v1 = (x1, y1, z1, w1), dan v2 = (x2, y2, z2, w2). Kemudian Anda memanipulasi vektor-vektor ini seperti angka. Misalnya, jumlah dari dua vektor, v1 + v2 akan menjadi (x1, y1, z1, w1) + (x2, y2, z2, w2). Kemudian Anda menambahkan vektor istilah dengan istilah seperti yang Anda inginkan angka, untuk mendapatkan: (x1 + x2, y1 + y2, z1 + z2, w1 + w2).
Program Anda akan menentukan vektor menggunakan array yang sesuai, dan kemudian melakukan operasi aritmatika pada mereka dalam urutan yang sesuai.
sumber