Find the first element in an array

3 views (last 30 days)
Miguel Albuquerque
Miguel Albuquerque on 16 Jul 2022
Commented: Voss on 16 Jul 2022
Hey guys, thanks in advance.
I want to find the first element and the last element, besides Nan in the matrix attached how can I do that?
This just gives me Nan
distance_matrix(1);
distance_matrix(2);
  7 Comments
Voss
Voss on 16 Jul 2022
That line doesn't belong in a loop. Move it out of the loop like I had it, and it seems to do what you want.
Here it is again, using the variable names you have in the latest version of your code:
load distance_matrix
c = 3e8;
distance_matrix(distance_matrix==0) = NaN;
[rows,columns]=size(distance_matrix);
[R0,ixR0] = min(distance_matrix)
R0 = 84.9718
ixR0 = 184
notNaN = ~isnan(distance_matrix);
first_idx = find(notNaN, 1, 'first')
first_idx = 184
last_idx = find(notNaN, 1, 'last')
last_idx = 276
% colOfMin is the same as ixR0 (minimum value appears only once)
% so you can use either one below in expression for tshift
[rowOfMin, colOfMin] = find(distance_matrix == R0) % Find row and col of min.
rowOfMin = 1
colOfMin = 184
% initialize tshift to NaNs the size of distance_matrix:
tshift = NaN(rows,columns);
% overwrite the elements of tshift where distance_matrix is non-NaN:
tshift(first_idx:last_idx) = ((first_idx:last_idx)-ixR0).^2./(R0.*c);
% first_idx == ixR0, so tshift(first_idx) == 0, as expected:
tshift(first_idx)
ans = 0

Sign in to comment.

Answers (1)

Image Analyst
Image Analyst on 16 Jul 2022
A little simpler:
% Load sample data.
load('distance_matrix.mat')
% Find non-nan indexes.
goodIndexes = find(~isnan(distance_matrix));
% Get the value of distance_matrix at the first non-nan index:
v1 = distance_matrix(goodIndexes(1))
v1 = 84.9718
% Get the value of distance_matrix at the last non-nan index:
v2 = distance_matrix(goodIndexes(end))
v2 = 111.3272
  1 Comment
Miguel Albuquerque
Miguel Albuquerque on 16 Jul 2022
Edited: Miguel Albuquerque on 16 Jul 2022
I created this:
If I want to calculate this just for this columns, how could I do it:
c=3e8;
first_idx=184;
last_idx=276;
calculation just for this= tshift((first_idx:last_idx)
calculatation I want to do= (idx2.^2)./(R0.*c)
[rows,columns]=size(distance_matrix);
[R0,ixR0]=min(distance_matrix(distance_matrix ~= 0));
first_idx = find(distance_matrix, 1, 'first');
last_idx = find(distance_matrix, 1, 'last');
[rowOfMin, colOfMin] = find(distance_matrix == R0); % Find row and col of min.
tshift=zeros(rows,columns);
for col = 1 : columns
thisColumn = distance_matrix(:, col);
idx2=col-colOfMin;
tshift(first_idx:last_idx)=(idx2.^2)./(R0.*c);
end

Sign in to comment.

Tags

Products

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!