Handling Arrays 2/2
description
Transcript of Handling Arrays 2/2
Handling Arrays 2/2
Numerical Computingwith .
MATLAB for Scientists and Engineers
2
You will be able to
Add, delete, permute all or sum of the vectors and matrices,
Sort and search matrix elements, Change the shape of the matrix, Flip, Rotate and Shift the matrix, Manipulate 2D images
3
Padding a Column
Inserting a column at a larger index than the size automatically fills in-betweens with ze-ros.
11 22 33
44 55 66
77 88 99
a= [1 2 3; 4 5 6; 7 8 9]a= [1 2 3; 4 5 6; 7 8 9] a(:,5)=[8 8 8]'a(:,5)=[8 8 8]'
11 22 33
44 55 66
77 88 99
00
00
00
88
88
88
4
Column Permutation
Use permuted array indexing
11 22 33
44 55 66
77 88 99
aa
112233
445566
778899
b=a(:,end:-1:1)b=a(:,end:-1:1)
1122 33
4455 66
7788 99
c=a(:,[2 3 1])c=a(:,[2 3 1])
5
Reshaping
Change matrix dimensions
11 22 33
44 55 66
77 88 99
aa b=reshape(a,2,6)b=reshape(a,2,6)
11 77 22
44 1010 55
9988
1111
33
66 1212
1010 1111 1212
b=reshape(a,3, [ ] )b=reshape(a,3, [ ] )
11 1010 88
44 22 1111
66
99
77 55 33 1212
6
Replicate Array
Use the given matrix as the tile in order to produce a larger matrix.
b = repmat (a(2:3,:), 2, 2)b = repmat (a(2:3,:), 2, 2)
11 22 33
44 55 66
77 88 99
aa
1010 1111 1212
44 55 66
77 88 99
44 55 66
77 88 99
44 55 66
77 88 99
44 55 66
77 88 99
7
Single Indexing
Looking at a matrix as a vector
sub2ind(size(a),3,2)sub2ind(size(a),3,2)11 22 33
44 55 66
77 88 99
aa
1010 1111 1212
77
b=a(7)b=a(7) 88
1
2
3
4
5
6
7
8
9
10
11
12
1
2
3
4
1 2 3
[r c] = ind2sub(size(a),10)[r c] = ind2sub(size(a),10)
r=2r=2 c=3c=3
8
abs(a) > 1abs(a) > 1
-3-3a=-3:3a=-3:3 -2-2 -1-1 00 11 22 33
11 11 00 00 00 11 11
a(abs(a) > 1)a(abs(a) > 1) -3-3 -2-2 22 33
Logical Values
a(logical([1010111]))a(logical([1010111])) -3-3 -1-1 22 3311
Logical Arrays
9
Scalar Expansion
Filling matrices with a single value
a=3a=3
33
b=a(ones(2,3))b=a(ones(2,3))
33 33
33 33 33
22
b(:) = 2b(:) = 2
22 22
22 22 22
11
b=true(2,3)b=true(2,3)
11 11
11 11 11
11
b(2,2:3)=falseb(2,2:3)=false
11 11
11 00 00
10
Sorting Arrays
Sort the elements in ascending or descend-ing order.
22x=randperm(6)x=randperm(6) 33 55 44 66 11
11xs = sort(x)xs = sort(x) 22 33 44 55 66
66xs = sort(x,'descend')xs = sort(x,'descend') 55 44 33 22 11
[xs,idx]=sort(x)[xs,idx]=sort(x)
11xsxs 22 33 44 55 66
66idxidx 11 22 44 33 55
11
Sorting Matrices
The default is the column-wise sorting.
44
a=floor(10*rand(3,4))a=floor(10*rand(3,4))
22 00 88
88 66 66 55
55 88 33 77
44 22 00 55
55 66 33 77
88 88 66 88
sx=sort(a)sx=sort(a)
00 22 44 88
55 66 66 88
33 55 77 88
sx=sort(a,2)sx=sort(a,2)
for row-wise sortingfor row-wise sorting
12
Sort Using Pivot
Get sorting index and apply permutation.
44
A=floor(10*rand(3,4))A=floor(10*rand(3,4))
22 00 88
88 66 66 55
55 88 33 77
11
33
22
[tmp,idx]=sort(A(:,3))[tmp,idx]=sort(A(:,3))
As = A(idx,:)As = A(idx,:)
idxidx
44 22 00 88
55 88 33 77
88 66 66 55
13
Sub-array Searching 1/2
Substituting all elements larger than 7 to 0
44
A=floor(10*rand(3,4))A=floor(10*rand(3,4))
22 00 88
88 66 66 55
55 88 33 77
11
22
44
[r,c] = find(A>7)[r,c] = find(A>7)
k=find(A>7); A(k)=0k=find(A>7); A(k)=0
cc
22
33
11
rr
44 22 00 00
00 66 66 55
55 00 33 77
14
Sub-array Searching 2/2
First two or last two meeting the condition
find(a>3)find(a>3)
33a=randperm(7)a=randperm(7) 44 66 22 11 77 55
22 33 66 77
find(a>3,2)find(a>3,2) 22 33
find(a>3,2,'last')find(a>3,2,'last') 66 77
15
Minimum and Maximum
The minimum (or maximum) value and the corresponding index
min(a)min(a)
33aa 11 66 22 11 77 55
11
find(a==m)find(a==m) 22 55
[m,i]=min(a)[m,i]=min(a) 11 22m i
max(a)max(a) 77
find(a==M)find(a==M) 66
[M,j]=max(a)[M,j]=max(a) 77 66M j
16
Min / Max of a Matrix
The default is column-wise operation.
a = randn(3,7);b = 10*a;c = floor(b)
a = randn(3,7);b = 10*a;c = floor(b)
11 88 44 66 33 55 88
[m,i]=min(a)[m,i]=min(a)11
11
m
i
min(min(a))min(min(a)) 11
66 88 88 88 22 77 55
33 55 88 66 33 33 33
55 44 66 22 33 33
33 11 11 22 33 33
17
Flipping and Rotating
Matrices can be flipped, rotated and shifted.
11 22 33
44 55 66
77 88 99
aaflipud(a)flipud(a) fliplr(a)fliplr(a)
rot90(a)rot90(a) rot90(a,2)rot90(a,2)
circshift(a,1)circshift(a,1) circshift(a,-1)circshift(a,-1)
circshift(a,[0 1])circshift(a,[0 1]) circshift(a,[0 -1])circshift(a,[0 -1])
18
Upper, Lower and Diagonal Matrix
Various matrices based on the original matrix
11 22 33
44 55 66
77 88 99
aa
d=diag(a)d=diag(a) 11
55
99
c=diag(d)c=diag(d) 11 00 00
00 55 00
00 00 99
11 22 33
00 55 66
00 00 99
11 00 00
44 55 00
77 88 99
U=triu(a)U=triu(a) U=tril(a)U=tril(a)
19
Grayscale Image 1/2
Gray scale image is a 2-D matrix value: 0~256 lovetriangle.mlovetriangle.m
M = imread('lovetriangle.jpg');figure(1), imshow(M);figure(2), imshow(M(5:88,215:335));S = M; % Add photo frameS(1:5,:) = 0; S(end-5:end,:) = 0;S(:,1:5) = 0; S(:,end-5:end) = 0;figure(3), imshow(S);
M = imread('lovetriangle.jpg');figure(1), imshow(M);figure(2), imshow(M(5:88,215:335));S = M; % Add photo frameS(1:5,:) = 0; S(end-5:end,:) = 0;S(:,1:5) = 0; S(:,end-5:end) = 0;figure(3), imshow(S);
Black photoframe
20
Grayscale Image 2/2
Matrix operations apply to grayscale imagesM fliplr(M) triu(M)
M([M<5])=250 circshift(M,[0 160]) flipud(M)
21
Color Image
Color image is a 3-D matrix 2x2 matrix of pixels Each pixel is an [R G B] array R, G, B values: 0~255
squares.msquares.m
S = uint8(zeros(100,100,3));S( 1: 50, 1: 50,1) = 255; % redS( 1: 50,51:100,2) = 255; % greenS(51:100, 1: 50,3) = 255; % blueS(51:100,51:100,1:2) = 255; % yellowfigure(1), imshow(S);
S = uint8(zeros(100,100,3));S( 1: 50, 1: 50,1) = 255; % redS( 1: 50,51:100,2) = 255; % greenS(51:100, 1: 50,3) = 255; % blueS(51:100,51:100,1:2) = 255; % yellowfigure(1), imshow(S);
22
Exercise 1 – Color Photo Frame
Choose any photo you like and add color photo frame outside of the photo. You may choose the color of the photo frame as you like.
23
Solution 1
Script and Screenshotphoto_frame.mphoto_frame.m
24
Exercise 2 – Photo Puzzle
Cut a photo into 2x2 pieces and put them in a random position.
25
Solution 2
Script and Screenshotpuzzle2x2.mpuzzle2x2.m