How to append values to an array in for loop?

rotation_time_by_direction = [];
for i = 1:10:length(direction_table.rodent_RecordingTime)-10
direction_change = ones(1,10)';
for j = 1:10
direction_change(j,1) = abs(direction_table.direction(i,1)-direction_table.direction(i+j,1));
threshold_degree = 100;
if any(direction_change > threshold_degree)
rotation_time_by_direction = cat(1, rotation_time_by_direction, direction_table.rodent_RecordingTime(i));
end
end
end
I am trying append the rodent_RecordingTime values to rotation_time_by_direction array when rotation is more than 100 degrees over next 10 time steps. But I am not sure why the rodent_RecordingTime is appending to the array. I have attached the variables if you want to look at it. Any help is appreciated.

2 Kommentare

"But I am not sure why the rodent_RecordingTime is appending to the array."
cat(1, rotation_time_by_direction, direction_table.rodent_RecordingTime(i))
% ^^^^^^^^^^^^^^^^^^^^
Atanu
Atanu am 5 Mai 2022
Sorry, I didn't get your comment. If you are asking what do I mean by "But I am not sure why the rodent_RecordingTime is appending to the array.", you can consider it redundant.

Melden Sie sich an, um zu kommentieren.

 Akzeptierte Antwort

dpb
dpb am 5 Mai 2022

1 Stimme

>> for i=1:10:height(direction_table)-10
dx=abs(direction_table.direction(i+1:i+9)-direction_table.direction(i));
ix=find(dx>100,1);
id=ix+i-1;
if any(ix), disp([direction_table{i,:} dx(ix)]),end
end
0 -5.1105 -465.77 -72.713 107.33
4 146.82 -398.22 -228.38 324.64
12 -126.12 -125.06 -378.62 102.2
13 -111.11 -120.79 -379.49 289.69
14 168.73 -118.5 -374.87 215.66
17 177.23 -118.23 -382.94 352.16
>>

6 Kommentare

Thank you very much. Although 'disp' works but when I try to store it to a variable it shows me only 1 row.
load('direction_table.mat');
for i=1:10:height(direction_table)-10
dx=abs(direction_table.direction(i+1:i+9)-direction_table.direction(i));
ix=find(dx>100,1);
if any(ix)
x = [direction_table{i,:} dx(ix)];
end
end
x =
17.0000 177.2270 -118.2320 -382.9450 352.1560
dpb
dpb am 7 Mai 2022
You didn't subscript x -- writing a variable on the LH side replaces the entire variable with the RHS each time.
Atanu
Atanu am 7 Mai 2022
What should I use for subscript if I don't know the height of resulting table beforehand?
Well, the maximum number of rows you can have would be height(direction_table)/10 since that's the index expression for your loop...since you may have some data subsets that contain no matches, there may not be that many "real" answers, but it's the most you could possibly have.
So, allocate for that and then you can remove rows with nothing in them when done --
This is also a case where you would use a second indexing variable inside the if...end clause and only increment it there...
H=height(direction_table)-10;
out=nan(ceil(H/10),5);
j=0;
for i=1:10:
dx=abs(direction_table.direction(i+1:i+9)-direction_table.direction(i));
ix=find(dx>100,1);
id=ix+i-1;
if any(ix)
j=j+1;
out(j,:)=[direction_table{i,:} dx(ix)];
end
end
out=out(isfinite(out(:,1)),;);
Thank you everyone for your comments. I kept on trying with append method, and I think this gives me the result I wanted.
load('direction_table.mat');
rotation_time_by_direction = [];
for i = 1:10:height(direction_table)-10
direction_change = ones(1,10)';
for j = 1:10
direction_change(j,1) = abs(direction_table.direction(i,1)-direction_table.direction(i+j,1));
end
threshold_degree = 100;
if any(direction_change > threshold_degree)
rotation_time_by_direction = [rotation_time_by_direction; direction_table.rodent_RecordingTime(i)];
end
end
n_direction_table = direction_table{ismember(direction_table.rodent_RecordingTime,rotation_time_by_direction), :};

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Kategorien

Produkte

Version

R2022a

Gefragt:

am 5 Mai 2022

Kommentiert:

am 8 Mai 2022

Community Treasure Hunt

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

Start Hunting!

Translated by