How to compare matrix elements with their neighbors?
7 次查看(过去 30 天)
显示 更早的评论
Hi, I have a matrix A (50x1). I have to compare each element of matrix A with its two neighbors. The element of the matrices are organized in a circular way and the neighbors definition is as follows: Element "i" has two neighbors: element "i+1" and element "i-1", For instance element 2 has neighbors 1 and 3, element 50 has neighbors 49 and 1, element 1 has neighbors 50 and 2. If the value of element "i" from matrix A is smaller than value of element "i+1" and element "i-1" from matrix A,then I build another matrix B which element "i" is equal to element "i" from A matrix.
Any advice how to write this is very appreciated.
0 个评论
采纳的回答
Image Analyst
2016-11-24
You can use imregionalmin() from the Image Processing Toolbox, but you'll have to pad your array
% Create sample data.
A = uint8(randi(255, 1, 50))
% Pad A and create temporary vector paddedA
% so that we don't alter A (we might need the original A later).
paddedA = [A(end), A, A(1)];
minLocations = imregionalmin(paddedA)
% Create B
B = zeros(1, length(paddedA));
% Assign in the values of A
B(minLocations) = paddedA(minLocations);
% Crop back down.
B = B(2:end-1)
更多回答(1 个)
Guillaume
2016-11-24
编辑:Guillaume
2016-11-24
A = randi(20, 50, 1); %demo matrix
%using simple indexing
tocopy = A < [A(2:end); A(1)] & A < [A(end); A(1:end-1)];
%using circshift
tocopy = A < circshift(A, 1) & A < circshift(A, -1);
%now copy the selected values
B = zeros(size(A)); %create B first
B(tocopy) = A(tocopy); %copy
0 个评论
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Logical 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!