On Sunday, January 10, 2016 at 7:16:23 AM UTC+5:30, Robert wrote: > Hi, > > I see below code snippet. The return line is not as the usual type. > > > > def make_cov(cov_type, n_comp, n_fea): > mincv = 0.1 > rand = np.random.random > return { > 'spherical': (mincv + mincv * np.dot(rand((n_components, 1)), > np.ones((1, n_features)))) ** 2, > 'tied': (make_spd_matrix(n_features) > + mincv * np.eye(n_features)), > 'diag': (mincv + mincv * rand((n_components, n_features))) ** 2, > 'full': np.array([(make_spd_matrix(n_features) > + mincv * np.eye(n_features)) > for x in range(n_components)]) > }[cov_type] > > Specifically, could you explain the meaning of > > { > ... }[cov_type] > > to me? > > > Thanks,
May help if you see it in pseudo-C like this switch (cov_type) case 'spherical': return (mincv + mincv * np.dot(rand((n_components, 1)), np.ones((1, n_features)))) ** 2, case 'tied': return (make_spd_matrix(n_features) + mincv * np.eye(n_features)), case 'diag': return (mincv + mincv * rand((n_components, n_features))) ** 2, case 'full': return np.array([(make_spd_matrix(n_features) + mincv * np.eye(n_features)) for x in range(n_components)]) Yeah looks backward in python compared to the C-ish The python is more powerful however because its *data-driven* ie what is code in C is data in python. BTW this is one of the motley components collected together under the somewhat inept moniker of 'functional programming': http://blog.languager.org/2012/10/functional-programming-lost-booty.html Also you can make the python look less backward by naming the dictionary, separate from the lookup: d = {'spherical' : ..., 'tied' :..., 'diag' : ...} return d[cov_type] -- https://mail.python.org/mailman/listinfo/python-list