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
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
julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
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 julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
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 julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
8số lượng phần tử trong julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
8số lượng thứ nguyên của julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
8a bộ chứa thứ nguyên của julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
8kích thước của julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
8 dọc theo thứ nguyên julia> [1; 2;; 3; 4;; 5; 6;;;
7; 8;; 9; 10;; 11; 12]
2×3×2 Array{Int64, 3}:
[:, :, 1] =
1 3 5
2 4 6
[:, :, 2] =
7 9 11
8 10 12
7a bộ chứa các chỉ số hợp lệ của julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
8a phạm vi biểu thị các chỉ số hợp lệ dọc theo thứ nguyên julia> [1; 2;; 3; 4;; 5; 6;;;
7; 8;; 9; 10;; 11; 12]
2×3×2 Array{Int64, 3}:
[:, :, 1] =
1 3 5
2 4 6
[:, :, 2] =
7 9 11
8 10 12
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ố
julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
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 julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
18, là kiểu phần tử của mảng. Nếu loại julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
18 bị bỏ qua, nó sẽ mặc định làFunctionDescriptionan dày đặc chưa khởi tạo một julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
52 trong số tất cả các số không, julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
52 trong số tất cả các số một, với tất cả các giá trị julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
59a julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
58 với tất cả các giá trị julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
92một mảng chứa cùng dữ liệu như julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
8, nhưng với các kích thước khác nhau sao chép julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
8sao chép julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
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 julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
8 nếu bị bỏ qua. một mảng có cùng dữ liệu nhị phân như julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
8, nhưng có loại phần tử julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
18an julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
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 julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
52 với các giá trị ngẫu nhiên, iid và phân phối chuẩn chuẩnjulia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
910-by-julia> [1; 2;; 3; 4;; 5; 6;;;
7; 8;; 9; 10;; 11; 12]
2×3×2 Array{Int64, 3}:
[:, :, 1] =
1 3 5
2 4 6
[:, :, 2] =
7 9 11
8 10 12
7 ma trận đồng nhất. Yêu cầu julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
912 cho. một phạm vi gồm các phần tử khoảng cách tuyến tính của julia> [1; 2;; 3; 4;; 5; 6;;;
7; 8;; 9; 10;; 11; 12]
2×3×2 Array{Int64, 3}:
[:, :, 1] =
1 3 5
2 4 6
[:, :, 2] =
7 9 11
8 10 12
7 từ julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
916 đến julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
917 điền vào mảng julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
8 với giá trị julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
920an julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
52 điền vào giá trị julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
920. Đặc biệt, julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
924 xây dựng một julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
52 không chiều chứa julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
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
julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
2Ở đây,
julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
927 là a và đối số đầu tiên — loại phần tử — là tùy chọn, mặc định là julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
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à
julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
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à julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
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 julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
935 — được tạo; julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
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 [
julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
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ửjulia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
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
julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
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
julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
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
julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
Giống như
julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
937 và julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
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 đó, julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
940 nối trong thứ nguyên thứ ba, julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
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ướcjulia> [1; 2;; 3; 4;; 5; 6;;;
7; 8;; 9; 10;; 11; 12]
2×3×2 Array{Int64, 3}:
[:, :, 1] =
1 3 5
2 4 6
[:, :, 2] =
7 9 11
8 10 12
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.
julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
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à
julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
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]julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
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
julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
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ềujulia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
15julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
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
julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
954. Điều này sẽ xây dựng một mảng 1-d với loại phần tử julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
18, được khởi tạo để chứa các phần tử julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
8, julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
957, julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
958, v.v. Ví dụ: julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
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ả
julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
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
julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
91Ý nghĩa của dạng này là
julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
960 được đánh giá với các biến julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
920, julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
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ư julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
963 hoặc julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
964 hoặc các mảng giá trị rõ ràng như julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
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 julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
966, julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
967, v.v. và mỗi đánh giá julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
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.
julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
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
julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
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ớ
julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
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
julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
95Tất cả các biểu thức được phân tách bằng dấu phẩy sau
julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
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àojulia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
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ụ:
julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
971 nắm bắt ba biến julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
972, julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
973 và julia> [1; 2;; 3; 4;; 5; 6;;;
7; 8;; 9; 10;; 11; 12]
2×3×2 Array{Int64, 3}:
[:, :, 1] =
1 3 5
2 4 6
[:, :, 2] =
7 9 11
8 10 12
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
julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
969julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
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
julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
976julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
98Cú pháp chung để lập chỉ mục cho mảng n chiều
julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
8 làjulia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
99trong đó mỗi
julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
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 [julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
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 julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
981 hoặc julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
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 julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
59 của chúngNếu tất cả các chỉ số là vô hướng, thì kết quả
julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
984 là một phần tử duy nhất từ mảng julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
8. Mặt khác, julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
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ố
julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
978 đều là vectơ, thì hình dạng của julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
984 sẽ là julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
989, với vị trí julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
990 của julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
984 chứa giá trị julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
992Ví dụ
julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
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
julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
993 thành ma trận hai chiều thì julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
984 trở thành mảng chiều julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
995 có hình dạng julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
996. Ma trận thêm một thứ nguyênVí dụ
julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
21Vị trí
julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
997 chứa giá trị tại julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
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 julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
999 là một mảng các chỉ số, thì kết quả của julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
200 là một mảng có kích thước julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
201. Phần tử thứ julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
202 của nó được điền bởi julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
203Là một phần đặc biệt của cú pháp này, từ khóa
julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
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 julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
204 tương đương với một cuộc gọi đếnjulia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
22Ví dụ
julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
23Cú pháp chung để gán giá trị trong mảng n chiều
julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
8 làjulia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
24trong đó mỗi
julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
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 [julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
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 julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
981 hoặc julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
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 julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
59 của chúngNếu tất cả các chỉ số
julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
978 là số nguyên, thì giá trị ở vị trí julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
215 của julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
8 được ghi đè bằng giá trị của julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
984, chuyển sang vị trí của julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
8 nếu cầnNếu bất kỳ chỉ mục nào
julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
978 tự nó là một mảng, thì phía bên tay phải của julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
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 julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
223 hoặc một vectơ có cùng số phần tử. Giá trị ở vị trí julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
224 của julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
8 được ghi đè bằng giá trị julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
226, chuyển đổi nếu cần. Toán tử gán phần tử khôn ngoan julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
227 có thể được sử dụng để julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
984 trên các vị trí đã chọnjulia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
25Cũng giống như trong , từ khóa
julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
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 julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
204 tương đương với một cuộc gọi đếnjulia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
26Ví dụ
julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
27Trong biểu thức
julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
223, mỗi julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
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- một chỉ số vô hướng. Theo mặc định, điều này bao gồm
- Số nguyên không phải boolean
- s, hoạt động giống như một bộ số nguyên
236 bao trùm nhiều chiều [xem bên dưới để biết thêm chi tiết]julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5] 3×3 Matrix{Int64}: 0 0 1 0 0 2 3 4 5 julia> [1:2; 4;; 1; 3:4] 3×2 Matrix{Int64}: 1 1 2 3 4 4
- Một mảng các chỉ số vô hướng. Điêu nay bao gôm
- Vectơ và mảng nhiều chiều của số nguyên
- Các mảng trống như
936, không chọn phần tử nàojulia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5] 3×3 Matrix{Int64}: 0 0 1 0 0 2 3 4 5 julia> [1:2; 4;; 1; 3:4] 3×2 Matrix{Int64}: 1 1 2 3 4 4
- Các phạm vi như
981 hoặcjulia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5] 3×3 Matrix{Int64}: 0 0 1 0 0 2 3 4 5 julia> [1:2; 4;; 1; 3:4] 3×2 Matrix{Int64}: 1 1 2 3 4 4
982, chọn các tiểu mục liền kề hoặc nối tiếp nhau từjulia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5] 3×3 Matrix{Int64}: 0 0 1 0 0 2 3 4 5 julia> [1:2; 4;; 1; 3:4] 3×2 Matrix{Int64}: 1 1 2 3 4 4
240 đếnjulia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5] 3×3 Matrix{Int64}: 0 0 1 0 0 2 3 4 5 julia> [1:2; 4;; 1; 3:4] 3×2 Matrix{Int64}: 1 1 2 3 4 4
241 [bao gồm]julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5] 3×3 Matrix{Int64}: 0 0 1 0 0 2 3 4 5 julia> [1:2; 4;; 1; 3:4] 3×2 Matrix{Int64}: 1 1 2 3 4 4
- Bất kỳ mảng tùy chỉnh nào của các chỉ số vô hướng là một kiểu con của
49julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5] 3×3 Matrix{Int64}: 0 0 1 0 0 2 3 4 5 julia> [1:2; 4;; 1; 3:4] 3×2 Matrix{Int64}: 1 1 2 3 4 4
- Mảng của
235 [xem bên dưới để biết thêm chi tiết]julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5] 3×3 Matrix{Int64}: 0 0 1 0 0 2 3 4 5 julia> [1:2; 4;; 1; 3:4] 3×2 Matrix{Int64}: 1 1 2 3 4 4
- 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. Theo mặc định, điều này bao gồm
- [
980], đại diện cho tất cả các chỉ số trong toàn bộ thứ nguyên hoặc trên toàn bộ mảngjulia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5] 3×3 Matrix{Int64}: 0 0 1 0 0 2 3 4 5 julia> [1:2; 4;; 1; 3:4] 3×2 Matrix{Int64}: 1 1 2 3 4 4
- Mảng booleans, chọn các phần tử tại chỉ số
59 của chúng [xem bên dưới để biết thêm chi tiết]julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5] 3×3 Matrix{Int64}: 0 0 1 0 0 2 3 4 5 julia> [1:2; 4;; 1; 3:4] 3×2 Matrix{Int64}: 1 1 2 3 4 4
- [
Vài ví dụ
julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
28Đối tượng đặc biệt
julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
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 julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
236 bao trùm nhiều chiều. Ví dụjulia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
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
julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
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
julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
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 julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
8 từ phía trênjulia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
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
julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
255 đầu tiên từ julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
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 julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
980 để trích xuất cả hai đường chéo từ hai trang cùng một lúcjulia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
31Cảnh báo
julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
250 và mảng của julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
250 không tương thích với từ khóa julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
204 để biểu thị chỉ mục cuối cùng của thứ nguyên. Không sử dụng julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
204 trong các biểu thức lập chỉ mục có thể chứa julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
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à
julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
59. Lập chỉ mục theo vectơ boolean julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
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 julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
236 thực sự giống như lập chỉ mục theo vectơ của julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
235 trong đó các giá trị của nó là julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
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ướcjulia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
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
julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
272, julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
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
julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
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ứ julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
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ớijulia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
33Một chỉ mục tuyến tính trong mảng
julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
8 có thể được chuyển đổi thành một julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
250 để lập chỉ mục cartesian với julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
279 [xem ] và một tập hợp các chỉ số cartesian julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
236 có thể được chuyển đổi thành một chỉ mục tuyến tính với julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
282 [xem ]julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
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ì
julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
288. Cái trước không chỉ nhanh hơn nhiều trong trường hợp julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
8 là julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
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
julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
236 có thể được lập chỉ mục với ít hơn hoặc nhiều hơn chỉ mục julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
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
julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
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àyjulia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
35Khi bỏ qua tất cả các chỉ mục với
julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
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
julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
236 chỉ số nếu tất cả các chỉ số nằm ngoài thứ nguyên của mảng là julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
296 [hoặc tổng quát hơn là phần tử đầu tiên và duy nhất của julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
297 trong đó julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
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ạnjulia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
36Các cách được đề xuất để lặp lại toàn bộ mảng là
julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
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,
julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
274 sẽ là một julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
300 nếu julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
8 là một kiểu mảng có lập chỉ mục tuyến tính nhanh; julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
38Ngược lại với
julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
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
julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
39Cài đặt này sẽ khiến phép lặp
julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
304 trên một julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
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 julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
308 sẽ được sử dụngCác toán tử sau được hỗ trợ cho mảng
- Số học một ngôi –
309,julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5] 3×3 Matrix{Int64}: 0 0 1 0 0 2 3 4 5 julia> [1:2; 4;; 1; 3:4] 3×2 Matrix{Int64}: 1 1 2 3 4 4
310julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5] 3×3 Matrix{Int64}: 0 0 1 0 0 2 3 4 5 julia> [1:2; 4;; 1; 3:4] 3×2 Matrix{Int64}: 1 1 2 3 4 4
- Số học nhị phân –
309,julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5] 3×3 Matrix{Int64}: 0 0 1 0 0 2 3 4 5 julia> [1:2; 4;; 1; 3:4] 3×2 Matrix{Int64}: 1 1 2 3 4 4
310,julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5] 3×3 Matrix{Int64}: 0 0 1 0 0 2 3 4 5 julia> [1:2; 4;; 1; 3:4] 3×2 Matrix{Int64}: 1 1 2 3 4 4
313,julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5] 3×3 Matrix{Int64}: 0 0 1 0 0 2 3 4 5 julia> [1:2; 4;; 1; 3:4] 3×2 Matrix{Int64}: 1 1 2 3 4 4
314,julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5] 3×3 Matrix{Int64}: 0 0 1 0 0 2 3 4 5 julia> [1:2; 4;; 1; 3:4] 3×2 Matrix{Int64}: 1 1 2 3 4 4
315,julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5] 3×3 Matrix{Int64}: 0 0 1 0 0 2 3 4 5 julia> [1:2; 4;; 1; 3:4] 3×2 Matrix{Int64}: 1 1 2 3 4 4
316julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5] 3×3 Matrix{Int64}: 0 0 1 0 0 2 3 4 5 julia> [1:2; 4;; 1; 3:4] 3×2 Matrix{Int64}: 1 1 2 3 4 4
- So sánh –
317,julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5] 3×3 Matrix{Int64}: 0 0 1 0 0 2 3 4 5 julia> [1:2; 4;; 1; 3:4] 3×2 Matrix{Int64}: 1 1 2 3 4 4
318,julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5] 3×3 Matrix{Int64}: 0 0 1 0 0 2 3 4 5 julia> [1:2; 4;; 1; 3:4] 3×2 Matrix{Int64}: 1 1 2 3 4 4
319 [],julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5] 3×3 Matrix{Int64}: 0 0 1 0 0 2 3 4 5 julia> [1:2; 4;; 1; 3:4] 3×2 Matrix{Int64}: 1 1 2 3 4 4
321julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5] 3×3 Matrix{Int64}: 0 0 1 0 0 2 3 4 5 julia> [1:2; 4;; 1; 3:4] 3×2 Matrix{Int64}: 1 1 2 3 4 4
Để 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
julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
322, e. g. julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
323 hoặc julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
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. julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
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.
julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
326Lưu ý rằng các so sánh như
julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
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ư julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
328 để so sánh theo từng phần tử. [Đối với các hoạt động so sánh như julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
329, chỉ phiên bản julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
330 theo phần tử được áp dụng cho mảng. ]Cũng lưu ý sự khác biệt giữa
julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
331, theo từng phần tử so với julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
240 và julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
335, và , tìm thấy giá trị lớn nhất trong phạm vi julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
240. Mối quan hệ tương tự giữ cho julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
338 và julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
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
julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
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ử
julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
41chẳng hạn như
julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
341 và julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
342 tương đương với các cuộc gọi julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
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 julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
227]. Trên thực tế, julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
322 tương đương với julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
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" julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
348 [bao gồm các cuộc gọi đến julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
341, v.v.] vào một cuộc gọi julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
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 ở]
julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
352, julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
353, julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
354, julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
355, julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
356 và một số đối số đơn phổ biến như julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
357 và julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
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ửjulia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
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
julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
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
julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
236 và loại phần tử julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
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 julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
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
julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
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 julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
360 cụ thể nào thường phải triển khai ít nhất [trả về một bộ dữ liệu julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
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 julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
360 được biểu diễn bên trong như thế nào, thì julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
18 là loại đối tượng được trả về bằng cách lập chỉ mục số nguyên [julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
377, khi julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
8 không trống] và julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
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 julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
49 tùy chỉnh, hãy xem phầnjulia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
382 là một kiểu con trừu tượng của julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
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 julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
382; . Rất ít hoạt động được triển khai cụ thể cho julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
52 ngoài những hoạt động được yêu cầu cho tất cả các julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
49; julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
390 là một chuyên môn hóa của julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
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 julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
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 julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
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 julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
400 nào trong biểu thức đó sẽ được chuyển đổi để tạo một dạng xem julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
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
julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
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 julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
404 và julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
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
julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
298. Ví dụ: nội dung dựng sẵn julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
52 được trả về bởi julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
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à julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
296julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
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 [
julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
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ử julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
413. Của mảng này là bộ của ba số này với nhaujulia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
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ư
julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
52 [và các kiểu con julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
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 julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
418 đề cập đến cùng một bộ nhớ như julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
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 julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
418 là julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
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ôijulia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
46Chế độ xem này đang chọn tương tự mọi cột khác từ
julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
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ứ haijulia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
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
julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
48Điều này có nghĩa là
julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
406 cho julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
418 thực sự đang trỏ vào giữa khối bộ nhớ của julia> [zeros[Int, 2, 2] ; [3 4] ;; [1; 2] ; 5]
3×3 Matrix{Int64}:
0 0 1
0 0 2
3 4 5
julia> [1:2; 4;; 1; 3:4]
3×2 Matrix{Int64}:
1 1
2 3
4 4
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à