MATLAB - Mảng
Tất cả các biến của tất cả các kiểu dữ liệu trong MATLAB đều là mảng nhiều chiều. Vectơ là mảng một chiều và ma trận là mảng hai chiều.
Chúng ta đã thảo luận về vectơ và ma trận. Trong chương này, chúng ta sẽ thảo luận về mảng nhiều chiều. Tuy nhiên, trước đó, chúng ta hãy thảo luận về một số loại mảng đặc biệt.
Mảng đặc biệt trong MATLAB
Trong phần này, chúng ta sẽ thảo luận về một số hàm tạo một số mảng đặc biệt. Đối với tất cả các hàm này, một đối số duy nhất tạo ra một mảng hình vuông, đối số kép tạo ra mảng hình chữ nhật.
Các zeros() hàm tạo một mảng tất cả các số không -
Ví dụ -
zeros(5)
MATLAB sẽ thực hiện câu lệnh trên và trả về kết quả sau:
ans =
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
Các ones() hàm tạo một mảng gồm tất cả những cái -
Ví dụ -
ones(4,3)
MATLAB sẽ thực hiện câu lệnh trên và trả về kết quả sau:
ans =
1 1 1
1 1 1
1 1 1
1 1 1
Các eye() chức năng tạo một ma trận nhận dạng.
Ví dụ -
eye(4)
MATLAB sẽ thực hiện câu lệnh trên và trả về kết quả sau:
ans =
1 0 0 0
0 1 0 0
0 0 1 0
0 0 0 1
Các rand() hàm tạo một mảng các số ngẫu nhiên được phân phối đồng đều trên (0,1) -
Ví dụ -
rand(3, 5)
MATLAB sẽ thực hiện câu lệnh trên và trả về kết quả sau:
ans =
0.8147 0.9134 0.2785 0.9649 0.9572
0.9058 0.6324 0.5469 0.1576 0.4854
0.1270 0.0975 0.9575 0.9706 0.8003
A Magic Square
A magic square là một hình vuông tạo ra cùng một tổng, khi các phần tử của nó được thêm vào theo hàng, theo cột hoặc theo đường chéo.
Các magic()hàm tạo một mảng vuông ma thuật. Nó có một đối số số ít cung cấp kích thước của hình vuông. Đối số phải là một đại lượng vô hướng lớn hơn hoặc bằng 3.
magic(4)
MATLAB sẽ thực hiện câu lệnh trên và trả về kết quả sau:
ans =
16 2 3 13
5 11 10 8
9 7 6 12
4 14 15 1
Mảng đa chiều
Mảng có nhiều hơn hai chiều được gọi là mảng nhiều chiều trong MATLAB. Mảng nhiều chiều trong MATLAB là phần mở rộng của ma trận hai chiều thông thường.
Nói chung để tạo một mảng nhiều chiều, trước tiên chúng ta tạo một mảng hai chiều và mở rộng nó.
Ví dụ, hãy tạo một mảng hai chiều a.
a = [7 9 5; 6 1 9; 4 3 2]
MATLAB sẽ thực hiện câu lệnh trên và trả về kết quả sau:
a =
7 9 5
6 1 9
4 3 2
Mảng a là mảng 3 x 3; chúng ta có thể thêm thứ nguyên thứ ba vào a , bằng cách cung cấp các giá trị như -
a(:, :, 2)= [ 1 2 3; 4 5 6; 7 8 9]
MATLAB sẽ thực hiện câu lệnh trên và trả về kết quả sau:
a =
ans(:,:,1) =
0 0 0
0 0 0
0 0 0
ans(:,:,2) =
1 2 3
4 5 6
7 8 9
Chúng ta cũng có thể tạo mảng nhiều chiều bằng cách sử dụng các hàm ones (), zeros () hoặc rand ().
Ví dụ,
b = rand(4,3,2)
MATLAB sẽ thực hiện câu lệnh trên và trả về kết quả sau:
b(:,:,1) =
0.0344 0.7952 0.6463
0.4387 0.1869 0.7094
0.3816 0.4898 0.7547
0.7655 0.4456 0.2760
b(:,:,2) =
0.6797 0.4984 0.2238
0.6551 0.9597 0.7513
0.1626 0.3404 0.2551
0.1190 0.5853 0.5060
Chúng tôi cũng có thể sử dụng cat()hàm xây dựng mảng nhiều chiều. Nó nối danh sách các mảng dọc theo một thứ nguyên cụ thể -
Cú pháp cho hàm cat () là -
B = cat(dim, A1, A2...)
Ở đâu,
B là mảng mới được tạo
A1 , A2 , ... là các mảng được nối
dim là thứ nguyên để nối các mảng với nhau
Thí dụ
Tạo một tệp script và nhập mã sau vào đó:
a = [9 8 7; 6 5 4; 3 2 1];
b = [1 2 3; 4 5 6; 7 8 9];
c = cat(3, a, b, [ 2 3 1; 4 7 8; 3 9 0])
Khi bạn chạy tệp, nó sẽ hiển thị -
c(:,:,1) =
9 8 7
6 5 4
3 2 1
c(:,:,2) =
1 2 3
4 5 6
7 8 9
c(:,:,3) =
2 3 1
4 7 8
3 9 0
Hàm mảng
MATLAB cung cấp các hàm sau để sắp xếp, xoay, hoán vị, định hình lại hoặc thay đổi nội dung mảng.
Chức năng | Mục đích |
---|---|
chiều dài | Chiều dài của vectơ hoặc kích thước mảng lớn nhất |
ndims | Số kích thước mảng |
numel | Số phần tử mảng |
kích thước | Kích thước mảng |
iscolumn | Xác định xem đầu vào có phải là vectơ cột hay không |
isempty | Xác định xem mảng có trống không |
ismatrix | Xác định xem đầu vào có phải là ma trận hay không |
bãi hoang | Xác định xem đầu vào có phải là vectơ hàng hay không |
Isscalar | Xác định xem đầu vào có phải là vô hướng hay không |
isvector | Xác định xem đầu vào có phải là vectơ hay không |
blkdiag | Xây dựng khối ma trận đường chéo từ các đối số đầu vào |
sự dịch chuyển vòng tròn | Chuyển mảng theo hình tròn |
ctranspose | Chuyển vị liên hợp phức tạp |
đường chéo | Ma trận đường chéo và đường chéo của ma trận |
flipdim | Lật mảng dọc theo kích thước được chỉ định |
flipplr | Lật ma trận từ trái sang phải |
lật đật | Lật ma trận lên xuống |
ipermute | Đảo ngược các kích thước hoán vị của mảng ND |
hoán vị | Sắp xếp lại kích thước của mảng ND |
quay lại | Bản sao và mảng lát |
định hình lại | Định hình lại mảng |
thối90 | Xoay ma trận 90 độ |
shiftdim | Thay đổi kích thước |
được sắp xếp | Xác định xem các phần tử tập hợp có theo thứ tự được sắp xếp hay không |
sắp xếp | Sắp xếp các phần tử mảng theo thứ tự tăng dần hoặc giảm dần |
máy phân loại | Sắp xếp các hàng theo thứ tự tăng dần |
vắt kiệt | Loại bỏ các kích thước singleton |
đổi chỗ | Transpose |
vectơ hóa | Vectơ hóa biểu thức |
Ví dụ
Các ví dụ sau minh họa một số chức năng được đề cập ở trên.
Length, Dimension and Number of elements −
Tạo một tệp script và nhập mã sau vào đó:
x = [7.1, 3.4, 7.2, 28/4, 3.6, 17, 9.4, 8.9];
length(x) % length of x vector
y = rand(3, 4, 5, 2);
ndims(y) % no of dimensions in array y
s = ['Zara', 'Nuha', 'Shamim', 'Riz', 'Shadab'];
numel(s) % no of elements in s
Khi bạn chạy tệp, nó sẽ hiển thị kết quả sau:
ans = 8
ans = 4
ans = 23
Circular Shifting of the Array Elements −
Tạo một tệp script và nhập mã sau vào đó:
a = [1 2 3; 4 5 6; 7 8 9] % the original array a
b = circshift(a,1) % circular shift first dimension values down by 1.
c = circshift(a,[1 -1]) % circular shift first dimension values % down by 1
% and second dimension values to the left % by 1.
Khi bạn chạy tệp, nó sẽ hiển thị kết quả sau:
a =
1 2 3
4 5 6
7 8 9
b =
7 8 9
1 2 3
4 5 6
c =
8 9 7
2 3 1
5 6 4
Sắp xếp Mảng
Tạo một tệp script và nhập mã sau vào đó:
v = [ 23 45 12 9 5 0 19 17] % horizontal vector
sort(v) % sorting v
m = [2 6 4; 5 3 9; 2 0 1] % two dimensional array
sort(m, 1) % sorting m along the row
sort(m, 2) % sorting m along the column
Khi bạn chạy tệp, nó sẽ hiển thị kết quả sau:
v =
23 45 12 9 5 0 19 17
ans =
0 5 9 12 17 19 23 45
m =
2 6 4
5 3 9
2 0 1
ans =
2 0 1
2 3 4
5 6 9
ans =
2 4 6
3 5 9
0 1 2
Mảng ô
Mảng ô là mảng các ô được lập chỉ mục trong đó mỗi ô có thể lưu trữ một mảng có kích thước và kiểu dữ liệu khác nhau.
Các cellhàm được sử dụng để tạo một mảng ô. Cú pháp cho hàm ô là -
C = cell(dim)
C = cell(dim1,...,dimN)
D = cell(obj)
Ở đâu,
C là mảng ô;
dim là số nguyên vô hướng hoặc vectơ của số nguyên xác định kích thước của mảng ô C;
dim1, ..., dimN là các số nguyên vô hướng xác định kích thước của C;
obj là Một trong những điều sau -
- Mảng hoặc đối tượng Java
- Mảng .NET kiểu System.String hoặc System.Object
Thí dụ
Tạo một tệp script và nhập mã sau vào đó:
c = cell(2, 5);
c = {'Red', 'Blue', 'Green', 'Yellow', 'White'; 1 2 3 4 5}
Khi bạn chạy tệp, nó sẽ hiển thị kết quả sau:
c =
{
[1,1] = Red
[2,1] = 1
[1,2] = Blue
[2,2] = 2
[1,3] = Green
[2,3] = 3
[1,4] = Yellow
[2,4] = 4
[1,5] = White
[2,5] = 5
}
Truy cập dữ liệu trong mảng ô
Có hai cách để tham chiếu đến các phần tử của một mảng ô:
- Bao quanh các chỉ số trong dấu ngoặc đơn đầu tiên (), để tham chiếu đến tập hợp các ô
- Bao quanh các chỉ số trong dấu ngoặc nhọn {}, để tham chiếu đến dữ liệu trong các ô riêng lẻ
Khi bạn đặt các chỉ số trong dấu ngoặc đơn đầu tiên, nó đề cập đến tập hợp các ô.
Chỉ số mảng ô trong dấu ngoặc đơn trơn tham chiếu đến tập hợp các ô.
Ví dụ -
c = {'Red', 'Blue', 'Green', 'Yellow', 'White'; 1 2 3 4 5};
c(1:2,1:2)
MATLAB sẽ thực hiện câu lệnh trên và trả về kết quả sau:
ans =
{
[1,1] = Red
[2,1] = 1
[1,2] = Blue
[2,2] = 2
}
Bạn cũng có thể truy cập nội dung của các ô bằng cách lập chỉ mục với dấu ngoặc nhọn.
Ví dụ -
c = {'Red', 'Blue', 'Green', 'Yellow', 'White'; 1 2 3 4 5};
c{1, 2:4}
MATLAB sẽ thực hiện câu lệnh trên và trả về kết quả sau:
ans = Blue
ans = Green
ans = Yellow