In [120]: shapes = [6], [4, 2, 3, 1], [2, 1, 1]
In [121]: arrs = np.broadcast_arrays(*[np.empty(shape,int) for shape in shapes])
...:
In [122]: [a.shape for a in arrs]
Out[122]: [(4, 2, 3, 6), (4, 2, 3, 6), (4, 2, 3, 6)]
In [124]: np.lib.stride_tricks._broadcast_shape(*[np.empty(shape,int) for shape
...: in shapes])
Out[124]: (4, 2, 3, 6)
In [131]: np.broadcast(*[np.empty(shape,int) for shape in shapes]).shape
Out[131]: (4, 2, 3, 6)
Второй раз немного быстрее, 4,79 мкс против 42,4 мкс. Третий немного быстрее.
Когда я впервые прокомментировал, я начал с broadcast_arrays
и посмотрел код. То мне до _broadcast_shape
, то до np.broadcast
.
person
hpaulj
schedule
25.02.2019
np.broadcast_arrays
будет транслировать массивы друг против друга. Вы можете принять форму любого из возвращаемых массивов. Он возвращает фактические массивы, но, поскольку они передаются, это не должно быть особенно дорого; все они будут представлениями оригиналов. - person hpaulj   schedule 25.02.2019broadcast_arrays
используетnp.lib.stride_tricks._broadcast_shape(*args)
для получения целевой формы. Использование этого напрямую может быть немного быстрее, но оно помечено как приватное. Он, в свою очередь, используетnp.broadcast
. Я не использовал ни один из них много, но я подозреваю, чтоbroadcast_arrays
является самым простым/безопасным в использовании. - person hpaulj   schedule 25.02.2019