Javascript khởi tạo mảng 2d
Julia, giống như hầu hết các ngôn ngữ tính toán kỹ thuật, cung cấp triển khai mảng hạng nhất. Hầu hết các ngôn ngữ tính toán kỹ thuật đều chú ý rất nhiều đến việc triển khai mảng của chúng với chi phí của các vùng chứa khác. Julia không xử lý mảng theo bất kỳ cách đặc biệt nào. Thư viện mảng được triển khai gần như hoàn toàn trong chính Julia và lấy hiệu suất của nó từ trình biên dịch, giống như bất kỳ mã nào khác được viết bằng Julia. Như vậy, cũng có thể xác định các loại mảng tùy chỉnh bằng cách kế thừa từ. Xem để biết thêm chi tiết về cách triển khai loại mảng tùy chỉnh Show Mảng là một tập hợp các đối tượng được lưu trữ trong một lưới đa chiều. Mảng không chiều được cho phép, xem. Trong trường hợp chung nhất, một mảng có thể chứa các đối tượng kiểu. Đối với hầu hết các mục đích tính toán, mảng phải chứa các đối tượng thuộc loại cụ thể hơn, chẳng hạn như hoặc Nói chung, không giống như nhiều ngôn ngữ tính toán kỹ thuật khác, Julia không mong đợi các chương trình được viết theo kiểu véc tơ để đạt được hiệu suất. Trình biên dịch của Julia sử dụng suy luận kiểu và tạo mã được tối ưu hóa để lập chỉ mục mảng vô hướng, cho phép các chương trình được viết theo kiểu thuận tiện và dễ đọc mà không làm giảm hiệu suất và đôi khi sử dụng ít bộ nhớ hơn Ở Julia, tất cả các đối số của hàm là (i. e. bằng con trỏ). Một số ngôn ngữ máy tính kỹ thuật truyền mảng theo giá trị và trong khi điều này ngăn việc sửa đổi ngẫu nhiên bởi callees của một giá trị trong trình gọi, nó khiến việc tránh sao chép mảng không mong muốn trở nên khó khăn. Theo quy ước, tên hàm kết thúc bằng 3 cho biết rằng nó sẽ thay đổi hoặc hủy giá trị của một hoặc nhiều đối số của nó (ví dụ: so sánh và ). Người được gọi phải tạo bản sao rõ ràng để đảm bảo rằng họ không sửa đổi đầu vào mà họ không có ý định thay đổi. Nhiều chức năng không đột biến được triển khai bằng cách gọi một chức năng cùng tên với một 3 được thêm vào ở cuối trên một bản sao rõ ràng của đầu vào và trả lại bản sao đóHàmMô tảloại phần tử chứa trong 8số lượng phần tử trong 8số lượng thứ nguyên của 8a bộ chứa thứ nguyên của 8kích thước của 8 dọc theo thứ nguyên 7a bộ chứa các chỉ số hợp lệ của 8a phạm vi biểu thị các chỉ số hợp lệ dọc theo thứ nguyên 7một bộ lặp hiệu quả để truy cập từng thứ nguyên Nhiều chức năng để xây dựng và khởi tạo mảng được cung cấp. Trong danh sách các hàm như vậy sau đây, các lệnh gọi có đối số 17 có thể nhận một bộ kích thước kích thước duy nhất hoặc một loạt kích thước kích thước được truyền dưới dạng một số đối số thay đổi. Hầu hết các hàm này cũng chấp nhận đầu vào đầu tiên 18, là kiểu phần tử của mảng. Nếu loại 18 bị bỏ qua, nó sẽ mặc định làFunctionDescriptionan dày đặc chưa khởi tạo một 52 trong số tất cả các số không, 52 trong số tất cả các số một, với tất cả các giá trị 59a 58 với tất cả các giá trị 92một mảng chứa cùng dữ liệu như 8, nhưng với các kích thước khác nhau sao chép 8sao chép 8, sao chép đệ quy các phần tử của nómột mảng chưa khởi tạo của cùng một . ), nhưng với loại phần tử và kích thước được chỉ định. Đối số thứ hai và thứ ba đều là tùy chọn, mặc định là loại phần tử và kích thước của 8 nếu bị bỏ qua. một mảng có cùng dữ liệu nhị phân như 8, nhưng có loại phần tử 18an 52 với các giá trị ngẫu nhiên, iid và được phân phối đồng đều trong khoảng thời gian nửa mở $[0, 1)$một 52 với các giá trị ngẫu nhiên, iid và phân phối chuẩn chuẩn 910-by- 7 ma trận đồng nhất. Yêu cầu 912 cho. một phạm vi gồm các phần tử khoảng cách tuyến tính của 7 từ 916 đến 917 điền vào mảng 8 với giá trị 920an 52 điền vào giá trị 920. Đặc biệt, 924 xây dựng một 52 không chiều chứa 920Để xem các cách khác nhau mà chúng ta có thể truyền kích thước cho các hàm này, hãy xem xét các ví dụ sau 2Ở đây, 927 là a và đối số đầu tiên — loại phần tử — là tùy chọn, mặc định là 1Mảng cũng có thể được xây dựng trực tiếp với dấu ngoặc vuông; . e. , một vectơ) chứa các đối số được phân tách bằng dấu phẩy làm thành phần của nó. Loại phần tử () của mảng kết quả được xác định tự động bởi các loại đối số bên trong dấu ngoặc nhọn. Nếu tất cả các đối số là cùng một loại, thì đó là 931. Nếu tất cả chúng đều có một điểm chung thì chúng sẽ được chuyển đổi thành loại đó bằng cách sử dụng và loại đó là 931 của mảng. Mặt khác, một mảng không đồng nhất có thể chứa bất kỳ thứ gì — một 935 — được tạo; 9Nếu các đối số bên trong dấu ngoặc vuông được phân tách bằng dấu chấm phẩy đơn ( 937) hoặc dòng mới thay vì dấu phẩy, thì nội dung của chúng được nối với nhau theo chiều dọc thay vì chính các đối số được sử dụng làm phần tử 2Tương tự, nếu các đối số được phân tách bằng tab hoặc dấu cách hoặc dấu chấm phẩy kép, thì nội dung của chúng được nối theo chiều ngang với nhau 3Dấu chấm phẩy đơn (hoặc dòng mới) và dấu cách (hoặc tab) có thể được kết hợp để nối cả chiều ngang và chiều dọc cùng một lúc 4Dấu cách (và tab) có mức độ ưu tiên cao hơn dấu chấm phẩy, thực hiện bất kỳ phép nối ngang nào trước rồi mới nối kết quả. Mặt khác, sử dụng dấu chấm phẩy kép cho phép nối ngang, thực hiện bất kỳ phép nối dọc nào trước khi nối kết quả theo chiều ngang
Giống như 937 và 939 nối ở chiều thứ nhất và chiều thứ hai, việc sử dụng nhiều dấu chấm phẩy hơn sẽ mở rộng sơ đồ chung này. Số lượng dấu chấm phẩy trong dấu phân cách chỉ định thứ nguyên cụ thể, do đó, 940 nối trong thứ nguyên thứ ba, 941 trong thứ nguyên thứ 4, v.v. Ít dấu chấm phẩy được ưu tiên hơn, vì vậy các kích thước thấp hơn thường được nối trước
Giống như trước đây, khoảng trắng (và tab) để nối theo chiều ngang có mức độ ưu tiên cao hơn bất kỳ số lượng dấu chấm phẩy nào. Do đó, các mảng chiều cao hơn cũng có thể được viết bằng cách chỉ định các hàng của chúng trước, với các phần tử của chúng được sắp xếp theo văn bản theo cách tương tự như bố cục của chúng. 1Mặc dù cả hai đều có nghĩa là nối trong chiều thứ hai, khoảng trắng (hoặc tab) và 939 không thể xuất hiện trong cùng một biểu thức mảng trừ khi dấu chấm phẩy kép chỉ đóng vai trò là ký tự "tiếp tục dòng". Điều này cho phép một phép nối ngang duy nhất trải rộng trên nhiều dòng (không ngắt dòng được hiểu là nối dọc) 5Dấu chấm phẩy kết thúc cũng có thể được sử dụng để thêm các thứ nguyên có độ dài 1 ở cuối 9Tổng quát hơn, phép nối có thể được thực hiện thông qua hàm. Các cú pháp này là cách viết tắt của các lệnh gọi hàm mà bản thân chúng là các hàm tiện lợi SyntaxFunctionDescription nối các mảng đầu vào dọc theo (các) chiều 15 946viết tắt của `cat(A. ; . ; Một mảng với một loại phần tử cụ thể có thể được xây dựng bằng cú pháp 954. Điều này sẽ xây dựng một mảng 1-d với loại phần tử 18, được khởi tạo để chứa các phần tử 8, 957, 958, v.v. Ví dụ: 959 xây dựng một mảng không đồng nhất có thể chứa bất kỳ giá trị nàoTương tự, cú pháp nối có thể được thêm tiền tố vào một loại để chỉ định loại phần tử của kết quả 90Sự hiểu biết cung cấp một cách tổng quát và mạnh mẽ để xây dựng các mảng. Cú pháp hiểu tương tự như ký hiệu xây dựng tập hợp trong toán học 91Ý nghĩa của dạng này là 960 được đánh giá với các biến 920, 962, v.v. nhận từng giá trị trong danh sách giá trị đã cho của chúng. Các giá trị có thể được chỉ định là bất kỳ đối tượng có thể lặp lại nào, nhưng thường sẽ là các phạm vi như 963 hoặc 964 hoặc các mảng giá trị rõ ràng như 965. Kết quả là một mảng dày đặc N-d với các kích thước là sự nối các kích thước của các phạm vi biến 966, 967, v.v. và mỗi đánh giá 960 trả về một giá trị vô hướngVí dụ sau tính toán trung bình có trọng số của phần tử hiện tại và hàng xóm bên trái và bên phải của nó dọc theo lưới 1 chiều. 92Kiểu mảng kết quả phụ thuộc vào kiểu của các phần tử được tính giống như do. Để kiểm soát loại một cách rõ ràng, một loại có thể được thêm vào phần hiểu. Ví dụ: chúng tôi có thể yêu cầu kết quả ở độ chính xác duy nhất bằng cách viết 93Sự hiểu biết cũng có thể được viết mà không có dấu ngoặc vuông kèm theo, tạo ra một đối tượng được gọi là trình tạo. Đối tượng này có thể được lặp lại để tạo ra các giá trị theo yêu cầu, thay vì phân bổ một mảng và lưu trữ chúng trước (xem phần ). Ví dụ: biểu thức sau tính tổng một chuỗi mà không cấp phát bộ nhớ 94Khi viết biểu thức trình tạo có nhiều thứ nguyên bên trong danh sách đối số, cần có dấu ngoặc đơn để tách trình tạo khỏi các đối số tiếp theo 95Tất cả các biểu thức được phân tách bằng dấu phẩy sau 969 được hiểu là phạm vi. Thêm dấu ngoặc đơn cho phép chúng tôi thêm đối số thứ ba vào 96Trình tạo được thực hiện thông qua các chức năng bên trong. Giống như các hàm bên trong được sử dụng ở những nơi khác trong ngôn ngữ, các biến từ phạm vi kèm theo có thể được "bắt giữ" trong hàm bên trong. Ví dụ: 971 nắm bắt ba biến 972, 973 và 7 từ phạm vi kèm theo. Các biến được chụp có thể đưa ra những thách thức về hiệu suất; Phạm vi trong trình tạo và khả năng hiểu có thể phụ thuộc vào phạm vi trước đó bằng cách viết nhiều từ khóa 969 97Trong những trường hợp như vậy, kết quả luôn là 1-d Các giá trị đã tạo có thể được lọc bằng từ khóa 976 98Cú pháp chung để lập chỉ mục cho mảng n chiều 8 là 99trong đó mỗi 978 có thể là một số nguyên vô hướng, một mảng các số nguyên hoặc bất kỳ số nào khác. Điều này bao gồm ( 980) để chọn tất cả các chỉ số trong toàn bộ thứ nguyên, phạm vi của biểu mẫu 981 hoặc 982 để chọn các phần phụ liền kề hoặc phân tầng và các mảng booleans để chọn các phần tử tại chỉ mục 59 của chúngNếu tất cả các chỉ số là vô hướng, thì kết quả 984 là một phần tử duy nhất từ mảng 8. Mặt khác, 984 là một mảng có cùng số chiều với tổng các chiều của tất cả các chỉ sốVí dụ: nếu tất cả các chỉ số 978 đều là vectơ, thì hình dạng của 984 sẽ là 989, với vị trí 990 của 984 chứa giá trị 992Ví dụ 20Lưu ý kích thước của mảng kết quả khác nhau như thế nào trong hai trường hợp cuối cùng Nếu đổi 993 thành ma trận hai chiều thì 984 trở thành mảng chiều 995 có hình dạng 996. Ma trận thêm một thứ nguyênVí dụ 21Vị trí 997 chứa giá trị tại 998. Tất cả các kích thước được lập chỉ mục với vô hướng đều bị loại bỏ. Ví dụ: nếu 999 là một mảng các chỉ số, thì kết quả của 200 là một mảng có kích thước 201. Phần tử thứ 202 của nó được điền bởi 203Là một phần đặc biệt của cú pháp này, từ khóa 204 có thể được sử dụng để biểu thị chỉ mục cuối cùng của mỗi thứ nguyên trong dấu ngoặc đơn, được xác định bởi kích thước của mảng trong cùng được lập chỉ mục. Cú pháp lập chỉ mục không có từ khóa 204 tương đương với một cuộc gọi đến 22Ví dụ 23Cú pháp chung để gán giá trị trong mảng n chiều 8 là 24trong đó mỗi 978 có thể là một số nguyên vô hướng, một mảng các số nguyên hoặc bất kỳ số nào khác. Điều này bao gồm ( 980) để chọn tất cả các chỉ số trong toàn bộ thứ nguyên, phạm vi của biểu mẫu 981 hoặc 982 để chọn các phần phụ liền kề hoặc phân tầng và các mảng booleans để chọn các phần tử tại chỉ mục 59 của chúngNếu tất cả các chỉ số 978 là số nguyên, thì giá trị ở vị trí 215 của 8 được ghi đè bằng giá trị của 984, chuyển sang vị trí của 8 nếu cầnNếu bất kỳ chỉ mục nào 978 tự nó là một mảng, thì phía bên tay phải của 984 cũng phải là một mảng có cùng hình dạng như kết quả của việc lập chỉ mục 223 hoặc một vectơ có cùng số phần tử. Giá trị ở vị trí 224 của 8 được ghi đè bằng giá trị 226, chuyển đổi nếu cần. Toán tử gán phần tử khôn ngoan 227 có thể được sử dụng để 984 trên các vị trí đã chọn 25Cũng giống như trong , từ khóa 204 có thể được sử dụng để biểu thị chỉ mục cuối cùng của mỗi thứ nguyên trong dấu ngoặc đơn, như được xác định bởi kích thước của mảng được gán vào. Cú pháp gán được lập chỉ mục không có từ khóa 204 tương đương với một cuộc gọi đến 26Ví dụ 27Trong biểu thức 223, mỗi 978 có thể là một chỉ số vô hướng, một mảng các chỉ số vô hướng hoặc một đối tượng đại diện cho một mảng các chỉ số vô hướng và có thể được chuyển đổi thành như vậy bằng cách
Vài ví dụ 28Đối tượng đặc biệt 235 đại diện cho một chỉ mục vô hướng hoạt động giống như một bộ số nguyên 236 bao trùm nhiều chiều. Ví dụ 29Nếu xét riêng, điều này có vẻ tương đối tầm thường; . Tuy nhiên, khi được kết hợp với các biểu mẫu lập chỉ mục và trình vòng lặp khác mang lại 250es, điều này có thể tạo ra mã rất thanh lịch và hiệu quả. Xem bên dưới và để biết một số ví dụ nâng cao hơn, hãy xem bài đăng trên blog này về các thuật toán và phép lặp đa chiềuMảng của 235 cũng được hỗ trợ. Chúng đại diện cho một tập hợp các chỉ số vô hướng mà mỗi chiều dài khoảng 5236 chiều, cho phép một hình thức lập chỉ mục đôi khi được gọi là lập chỉ mục theo điểm. Ví dụ: nó cho phép truy cập các phần tử đường chéo từ "trang" đầu tiên của 8 từ phía trên 30Điều này có thể được thể hiện đơn giản hơn nhiều với và bằng cách kết hợp nó với một chỉ số nguyên thông thường (thay vì trích xuất 255 đầu tiên từ 8 như một bước riêng biệt). Nó thậm chí có thể được kết hợp với một 980 để trích xuất cả hai đường chéo từ hai trang cùng một lúc 31Cảnh báo 250 và mảng của 250 không tương thích với từ khóa 204 để biểu thị chỉ mục cuối cùng của thứ nguyên. Không sử dụng 204 trong các biểu thức lập chỉ mục có thể chứa 250 hoặc các mảng của chúngThường được gọi là lập chỉ mục logic hoặc lập chỉ mục với mặt nạ logic, lập chỉ mục bằng một mảng boolean chọn các phần tử tại các chỉ mục có giá trị của nó là 59. Lập chỉ mục theo vectơ boolean 957 thực sự giống như lập chỉ mục theo vectơ số nguyên được trả về bởi. Tương tự, lập chỉ mục theo mảng boolean chiều 236 thực sự giống như lập chỉ mục theo vectơ của 235 trong đó các giá trị của nó là 59. Chỉ mục logic phải là một vectơ có cùng độ dài với thứ nguyên mà nó lập chỉ mục hoặc nó phải là chỉ mục duy nhất được cung cấp và khớp với kích thước và chiều của mảng mà nó lập chỉ mục vào. Nói chung sẽ hiệu quả hơn khi sử dụng trực tiếp các mảng boolean làm chỉ mục thay vì gọi trước 32Cách thông thường để lập chỉ mục thành một mảng 5236 chiều ________ là sử dụng chính xác 5236 chỉ mục; . Ví dụ, trong mảng ba chiều 272, 273 sẽ chọn số ở hàng thứ hai của cột thứ ba trong "trang" đầu tiên của mảng. Điều này thường được gọi là lập chỉ mục cartesianKhi chính xác một chỉ mục 274 được cung cấp, chỉ mục đó không còn đại diện cho một vị trí trong một chiều cụ thể của mảng. Thay vào đó, nó chọn phần tử thứ 274 bằng cách sử dụng thứ tự lặp lại chính của cột kéo dài tuyến tính toàn bộ mảng. Điều này được gọi là lập chỉ mục tuyến tính. Về cơ bản, nó xử lý mảng như thể nó đã được định hình lại thành một vectơ một chiều với 33Một chỉ mục tuyến tính trong mảng 8 có thể được chuyển đổi thành một 250 để lập chỉ mục cartesian với 279 (xem ) và một tập hợp các chỉ số cartesian 236 có thể được chuyển đổi thành một chỉ mục tuyến tính với 282 (xem ) 34Điều quan trọng cần lưu ý là có sự bất đối xứng rất lớn trong hiệu suất của các chuyển đổi này. Chuyển đổi một chỉ số tuyến tính thành một tập hợp các chỉ số cartesian yêu cầu chia và lấy phần còn lại, trong khi đi theo cách khác chỉ là nhân và cộng. Trong các bộ xử lý hiện đại, phép chia số nguyên có thể chậm hơn 10-50 lần so với phép nhân. Trong khi một số mảng - giống như chính nó - được triển khai bằng cách sử dụng một đoạn bộ nhớ tuyến tính và sử dụng trực tiếp chỉ mục tuyến tính trong quá trình triển khai của chúng, thì các mảng khác - như - cần có bộ chỉ số cartesian đầy đủ để thực hiện tra cứu (xem nội quan cái nào). Như vậy, khi lặp lại toàn bộ mảng, tốt hơn hết là lặp lại thay vì 288. Cái trước không chỉ nhanh hơn nhiều trong trường hợp 8 là 290 mà còn hỗ trợ OffsetArrays nữaNgoài lập chỉ mục tuyến tính, một mảng chiều 236 có thể được lập chỉ mục với ít hơn hoặc nhiều hơn chỉ mục 236 trong một số trường hợp nhất địnhCác chỉ số có thể được bỏ qua nếu các thứ nguyên theo sau không được lập chỉ mục đều có độ dài một. Nói cách khác, các chỉ mục theo sau chỉ có thể được bỏ qua nếu chỉ có một giá trị khả dĩ mà các chỉ mục bị bỏ qua đó có thể dành cho một biểu thức lập chỉ mục trong giới hạn. Ví dụ: một mảng bốn chiều có kích thước 293 có thể được lập chỉ mục chỉ với ba chỉ số vì thứ nguyên bị bỏ qua (thứ nguyên thứ tư) có độ dài bằng một. Lưu ý rằng lập chỉ mục tuyến tính được ưu tiên hơn quy tắc này 35Khi bỏ qua tất cả các chỉ mục với 294, ngữ nghĩa này cung cấp một thành ngữ đơn giản để truy xuất phần tử duy nhất trong một mảng và đồng thời đảm bảo rằng chỉ có một phần tửTương tự, có thể cung cấp nhiều hơn 236 chỉ số nếu tất cả các chỉ số nằm ngoài thứ nguyên của mảng là 296 (hoặc tổng quát hơn là phần tử đầu tiên và duy nhất của 297 trong đó 298 là số thứ nguyên cụ thể đó). Điều này cho phép các vectơ được lập chỉ mục giống như ma trận một cột, chẳng hạn 36Các cách được đề xuất để lặp lại toàn bộ mảng là 37Cấu trúc đầu tiên được sử dụng khi bạn cần giá trị, nhưng không phải chỉ mục, của từng phần tử. Trong cấu trúc thứ hai, 274 sẽ là một 300 nếu 8 là một kiểu mảng có lập chỉ mục tuyến tính nhanh; 38Ngược lại với 303, lặp với cung cấp một cách hiệu quả để lặp trên bất kỳ loại mảng nàoNếu bạn viết một loại tùy chỉnh, bạn có thể chỉ định rằng nó có lập chỉ mục tuyến tính nhanh bằng cách sử dụng 39Cài đặt này sẽ khiến phép lặp 304 trên một 307 sử dụng số nguyên. Nếu bạn không chỉ định đặc điểm này, giá trị mặc định 308 sẽ được sử dụngCác toán tử sau được hỗ trợ cho mảng
Để cho phép vector hóa thuận tiện các phép toán và các phép toán khác, Julia 322, e. g. 323 hoặc 324, đối với các phép toán theo nguyên tố trên mảng hoặc hỗn hợp của mảng và vô hướng (một phép toán); . g. 325Ngoài ra, mọi toán tử nhị phân đều hỗ trợ a có thể được áp dụng cho mảng (và sự kết hợp của mảng và vô hướng) theo cách như vậy, e. g. 326Lưu ý rằng các so sánh như 317 hoạt động trên toàn bộ mảng, đưa ra một câu trả lời boolean duy nhất. Sử dụng các toán tử dấu chấm như 328 để so sánh theo từng phần tử. (Đối với các hoạt động so sánh như 329, chỉ phiên bản 330 theo phần tử được áp dụng cho mảng. )Cũng lưu ý sự khác biệt giữa 331, theo từng phần tử so với 240 và 335, và , tìm thấy giá trị lớn nhất trong phạm vi 240. Mối quan hệ tương tự giữ cho 338 và 339Đôi khi rất hữu ích khi thực hiện các phép toán nhị phân theo từng phần tử trên các mảng có kích thước khác nhau, chẳng hạn như thêm một vectơ vào mỗi cột của ma trận. Một cách không hiệu quả để làm điều này là sao chép vectơ theo kích thước của ma trận 40Điều này là lãng phí khi các kích thước trở nên lớn, vì vậy Julia cung cấp , mở rộng các kích thước đơn lẻ trong các đối số mảng để khớp với kích thước tương ứng trong mảng khác mà không cần sử dụng thêm bộ nhớ và áp dụng hàm đã cho theo từng phần tử 41chẳng hạn như 341 và 342 tương đương với các cuộc gọi 332 (ngoại trừ việc chúng hợp nhất, như ). Ngoài ra còn có một chức năng để chỉ định một đích rõ ràng (cũng có thể được truy cập theo kiểu hợp nhất bằng cách gán 227). Trên thực tế, 322 tương đương với 347, cung cấp một cú pháp thuận tiện để quảng bá bất kỳ chức năng nào (). Lồng các "cuộc gọi dấu chấm" 348 (bao gồm các cuộc gọi đến 341, v.v.) vào một cuộc gọi 332 duy nhấtNgoài ra, không giới hạn đối với mảng (xem tài liệu về chức năng); . Theo mặc định, chỉ một số loại đối số được coi là vô hướng, bao gồm (nhưng không giới hạn ở) 352, 353, 354, 355, 356 và một số đối số đơn phổ biến như 357 và 358. Tất cả các đối số khác được lặp lại hoặc lập chỉ mục thành phần tử 42Đôi khi, bạn muốn một vùng chứa (như một mảng) thường tham gia phát sóng được "bảo vệ" khỏi hành vi lặp lại của phát sóng trên tất cả các phần tử của nó. Bằng cách đặt nó bên trong một thùng chứa khác (như một phần tử đơn lẻ), quảng bá sẽ coi nó là một giá trị duy nhất 43Kiểu mảng cơ sở trong Julia là kiểu trừu tượng. Nó được tham số hóa bởi số thứ nguyên 236 và loại phần tử 18. và là bí danh cho các trường hợp 1-d và 2-d. Các thao tác trên các đối tượng 49 được xác định bằng cách sử dụng các hàm và toán tử cấp cao hơn, theo cách độc lập với bộ lưu trữ bên dưới. Các hoạt động này thường hoạt động chính xác dưới dạng dự phòng cho bất kỳ triển khai mảng cụ thể nàoLoại 49 bao gồm bất kỳ thứ gì giống như mảng một cách mơ hồ và việc triển khai nó có thể khá khác so với các mảng thông thường. Ví dụ: các phần tử có thể được tính toán theo yêu cầu thay vì được lưu trữ. Tuy nhiên, bất kỳ loại 360 cụ thể nào thường phải triển khai ít nhất (trả về một bộ dữ liệu 300) và ; . Chúng tôi khuyến nghị rằng các thao tác này có độ phức tạp về thời gian gần như không đổi, vì nếu không, một số hàm mảng có thể bị chậm bất ngờ. Các loại cụ thể cũng thường cung cấp một phương thức, được sử dụng để phân bổ một mảng tương tự cho và các hoạt động không đúng chỗ khác. Bất kể một 360 được biểu diễn bên trong như thế nào, thì 18 là loại đối tượng được trả về bằng cách lập chỉ mục số nguyên ( 377, khi 8 không trống) và 236 phải là độ dài của bộ được trả về bởi. Để biết thêm chi tiết về việc xác định triển khai 49 tùy chỉnh, hãy xem phần 382 là một kiểu con trừu tượng của 49 nhằm bao gồm tất cả các mảng trong đó các phần tử được lưu trữ liên tục theo thứ tự chính của cột (xem phần ). Loại này là một phiên bản cụ thể của 382; . Rất ít hoạt động được triển khai cụ thể cho 52 ngoài những hoạt động được yêu cầu cho tất cả các 49; 390 là một chuyên môn hóa của 49 thực hiện lập chỉ mục bằng cách chia sẻ bộ nhớ với mảng ban đầu thay vì sao chép nó. Một 390 được tạo bằng hàm, được gọi theo cách tương tự như (với một mảng và một loạt đối số chỉ mục). Kết quả của trông giống như kết quả của , ngoại trừ dữ liệu được giữ nguyên. lưu trữ các vectơ chỉ mục đầu vào trong một đối tượng 390, sau này có thể được sử dụng để lập chỉ mục mảng ban đầu một cách gián tiếp. Bằng cách đặt macro trước một biểu thức hoặc khối mã, bất kỳ lát cắt 400 nào trong biểu thức đó sẽ được chuyển đổi để tạo một dạng xem 390 thay thếs là các mảng boolean "được đóng gói" tiết kiệm không gian, lưu trữ một bit cho mỗi giá trị boolean. Chúng có thể được sử dụng tương tự như mảng 403 (lưu trữ một byte cho mỗi giá trị boolean) và có thể được chuyển đổi sang/từ mảng sau thông qua 404 và 405, tương ứngMột mảng được "strided" nếu nó được lưu trữ trong bộ nhớ với các khoảng cách được xác định rõ (sải) giữa các phần tử của nó. Một mảng có sải chân với loại phần tử được hỗ trợ có thể được chuyển đến thư viện bên ngoài (không phải Julia) như BLAS hoặc LAPACK bằng cách chuyển nó và sải chân cho mỗi thứ nguyên. Là khoảng cách giữa các phần tử dọc theo chiều 298. Ví dụ: nội dung dựng sẵn 52 được trả về bởi 410 có các phần tử của nó được sắp xếp liền kề theo thứ tự chính của cột. Điều này có nghĩa là sải chân của thứ nguyên đầu tiên — khoảng cách giữa các phần tử trong cùng một cột — là 296 44Bước tiến của chiều thứ hai là khoảng cách giữa các phần tử trong cùng một hàng, bỏ qua số phần tử bằng với số phần tử trong một cột ( 412). Tương tự, chuyển giữa hai "trang" (ở chiều thứ ba) yêu cầu bỏ qua các phần tử 413. Của mảng này là bộ của ba số này với nhau 45Trong trường hợp cụ thể này, số phần tử bị bỏ qua trong bộ nhớ khớp với số chỉ số tuyến tính bị bỏ qua. Đây chỉ là trường hợp đối với các mảng liền kề như 52 (và các kiểu con 382 khác) và nói chung là không đúng. Các dạng xem có chỉ số phạm vi là một ví dụ điển hình về các mảng có cấu trúc không liền kề; . Chế độ xem này 418 đề cập đến cùng một bộ nhớ như 8 nhưng đang bỏ qua và sắp xếp lại một số thành phần của nó. Bước tiến của chiều đầu tiên của 418 là 421 vì chúng tôi chỉ chọn mỗi hàng thứ ba từ mảng ban đầu của chúng tôi 46Chế độ xem này đang chọn tương tự mọi cột khác từ 8 ban đầu của chúng tôi — và do đó, nó cần bỏ qua phần tương đương của hai cột năm phần tử khi di chuyển giữa các chỉ mục trong chiều thứ hai 47Chiều thứ ba thú vị vì thứ tự của nó bị đảo ngược. Do đó, để chuyển từ "trang" đầu tiên sang trang thứ hai, nó phải quay ngược lại trong bộ nhớ và do đó, bước tiến của nó trong chiều này là âm 48Điều này có nghĩa là 406 cho 418 thực sự đang trỏ vào giữa khối bộ nhớ của 8 và nó đề cập đến các phần tử cả ngược và xuôi trong bộ nhớ. Xem để biết thêm chi tiết về cách xác định các mảng có cấu trúc của riêng bạn. và là các bí danh thuận tiện cho nhiều loại mảng dựng sẵn được coi là mảng có bước, cho phép chúng gửi đi để chọn các triển khai chuyên biệt gọi các hàm BLAS và LAPACK được điều chỉnh và tối ưu hóa cao chỉ bằng cách sử dụng con trỏ và các bướcĐiều đáng nhấn mạnh là các bước tiến là về sự bù đắp trong bộ nhớ hơn là lập chỉ mục. Nếu bạn đang muốn chuyển đổi giữa lập chỉ mục tuyến tính (chỉ mục đơn) và lập chỉ mục cartesian (đa chỉ mục), hãy xem và |