Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Is there an equivalent of Python's list and append feature in Matlab?

This is more of a Matlab programming question than it is a math question.

I'd like to run gradient descent multiple on different learning rates. I have a set of learning rates

alpha = [0.3, 0.1, 0.03, 0.01, 0.003, 0.001];

and each time I run gradient descent, I get a vector J_vals as output. However, I don't know Matlab well enough to know how to implement this besides doing something like:

[theta, J_vals] = gradientDescent(...., alpha(1),...);
J1 = J_vals;
[theta, J_vals] = gradientDescent(...., alpha(2),...);
J2 = J_vals;

and so on.

I thought about using a for loop, but then I don't know how I would deal with the J_vals's (not sure how to apply the for loop to J1, J2, and so on). Perhaps it would look something like this:

for i = len(alpha)
     [theta, J_vals] = gradientDescent(..., alpha(i),...);
     J(i) = J_vals;
end

Then I would have a vector of vectors.

In Python, I would just run a for loop and append each new result to the end of a list. How do I implement something like this in Matlab? Or is there a more efficient way?

like image 808
TheRealFakeNews Avatar asked Feb 09 '23 06:02

TheRealFakeNews


1 Answers

If you know how many loops you are going have and the size of the J_vals (or at least a reasonable upper bound) I would suggest pre-allocating the size of the container array

J = zeros(n,1);

then on each loop insert the new values

J(start:start+n) = J_vals

That way you don't reallocate memory. If you don't know, you can append the values to the array. For example,

J = []; % initialize
for i = len(alpha)
     [theta, J_vals] = gradientDescent(..., alpha(i),...);
    J = [J; J_vals]; % Append column row
end

but this is re-allocating the size of the array every loop. If it's not too many loops then it should be ok.

like image 71
dpmcmlxxvi Avatar answered Feb 11 '23 20:02

dpmcmlxxvi