How to create empty indexes when not available?

5 views (last 30 days)
For example:
Say:
data = [2,3,4,5,3,2,4,5]
I want to only look at a subset of the data starting from the 5th index +/-2 of data:
window = data(5-2:5+2)
window =
4 5 3 2 4
That works no problem because the data exisit.
Now say I want to look a the data starting from the 5th index -10/+2
window = data(5-10:5+2)
window = 'Array indices must be positive integers or logical values.'
Since there are not 10 indices available before the 5th index this won't work.
Is there a way to automatically fill indexes that don't exist with 'NaN' and fill the rest do the final output would look something like:
window =
NaN NaN NaN NaN NaN NaN 2 3 4 5 3 2 4
Any help would be greatly appreciated.
Thanks!

Accepted Answer

Stephen23
Stephen23 on 21 May 2021
Edited: Stephen23 on 21 May 2021
data = [2,3,4,5,3,2,4,5];
x = 5;
n = 10;
p = 2;
window = data(max(1,x-n):min(end,x+p))
window = 1×7
2 3 4 5 3 2 4
Are the NaNs really required?
  2 Comments
Dc215905
Dc215905 on 21 May 2021
Edited: Dc215905 on 21 May 2021
Thanks for the response. Yes, the NaN are necessary ( i think).
I'm trying to apply the answer you gave to the following scenerio.
I have a data set that's 1x1000. I'm allowing users to find specific events within the data and plotting a window around the event. This could result in 100 different event windows for a given dataset. For the most part, the window they choose around an event has data available, but if the event is at the beginning or the end of the data set then they won't be able to group that particular event with the rest of the events because the array lengths won't be similar.
I've thought about using just cells, but my current GUI is written in a way that each event window is stored in the a cell, but the associated x value ('time') is not because it's assumed to be constant depending on the users window definition. Ultimately the user is able to collapse all of the event windows and take the average signal etc. As a result, my current solution is to just fill the empty IDX with NaN so all of the arrays are uniform in length for downstream analysis options.
Stephen23
Stephen23 on 21 May 2021
Edited: Stephen23 on 22 May 2021
Just pad the NaNs to the ends:
data = [2,3,4,5,3,2,4,5];
x = 5;
n = 10;
p = 2;
window = data(max(1,x-n):min(end,x+p))
window = 1×7
2 3 4 5 3 2 4
window = [nan(1,1+n-x),window,nan(1,x+p-numel(data))]
window = 1×13
NaN NaN NaN NaN NaN NaN 2 3 4 5 3 2 4

Sign in to comment.

More Answers (0)

Tags

Community Treasure Hunt

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

Start Hunting!