I’m learning gradient descent algorithm reading this article https://realpython.com/gradient-descent-algorithm-python/#minibatches-in-stochastic-gradient-descent and I’m stuck with one peace of Python code written by author. There is Python code in ‘Minibatches in Stochastic Gradient Descent’ chapter. I will post here only part I’m stuck with.
def sgd( gradient, x, y, start, learn_rate=0.1, batch_size=1, n_iter=50, tolerance=1e-06, dtype="float64", random_state=None ): ... # Initializing the values of the variables vector = np.array(start, dtype=dtype_) ... return vector if vector.shape else vector.item()
I’m not experienced with Python and cannot realize when
vector.shape may give false in if-else block so it would return
vector.item() instead of
vector. Any ideas would be appreciated.
This is explained by the author of the tutorial:
This is an interesting trick [refering to
vector = np.array(start, dtype=dtype_)]: if
startis a Python scalar, then it’ll be transformed into a corresponding NumPy object (an array with one item and zero dimensions). If you pass a sequence, then it’ll become a regular NumPy array with the same number of elements.
You can see the two different cases here:
>>> x = np.array() # shape (1,) >>> x if x.shape else x.item() array()
Whereas a scalar will be returned as a scalar using
item on the
>>> x = np.array(2021) # shape () >>> x if x.shape else x.item() 2021