How to use For loop or any other loop to rearrange elements in a matrix using Matlab?
2 views (last 30 days)
using the attache file for matrix. i am using for loop but i am making mistake some where.
My objective in the columns or rows should contains elements eithr 1 or 3 to generate a boundary of the sphere while the remaining elements should be zero.
For example, if in a row: 3 3 0 0 ... 1, i want first element or last element should be either 1 or 3 but other elments inside of the row or column should be zero. So it should be like: 3 0 0 0 .. 1
Any guidance please. Thanks in advance.
matrix = load('Boundary_closed_1s_3s.txt')
[m, n] = size(matrix)
For i = 1:m
for j = 1:n
Walter Roberson on 28 Nov 2020
The following code is untested.
M = readmatrix('Boundary_closed_1s_3s.txt');
position_of_first = sum(cumprod(~M, 2),2) + 1;
position_of_last = size(M,2) - sum(cumprod(fliplr(~M),2),2);
rows_with_data = find(position_of_last ~= 0);
newM = sparse([rows_with_data, rows_with_data], [position_of_first(rows_with_data), position_of_last(rows_with_data)], 1);
When you examine the results, I suspect you will want to redefine the problem. For example on row 4, that stretch of 1's will be replaced by just the first 1 and the last 1, but that will leave an empty upper boundary for rows 13 and 14.
I would suggest to you that you would be better of taking logical(M) and then using bwskel() https://www.mathworks.com/help/images/ref/bwskel.html or similar morphological operations.