Я хочу транслировать массив b
в форму, которую он принял бы, если бы выполнял арифметическую операцию с другим массивом a
.
Например, если a.shape = (3,3)
и b
были скаляром, я хочу получить массив, форма которого равна (3,3)
и заполнена скаляром.
Один из способов сделать это так:
>>> import numpy as np
>>> a = np.arange(9).reshape((3,3))
>>> b = 1 + a*0
>>> b
array([[1, 1, 1],
[1, 1, 1],
[1, 1, 1]])
Хотя на практике это работает, я не могу не чувствовать, что это выглядит немного странно, и кому-то другому, глядя на код, не будет очевидно, что я пытаюсь сделать.
Есть ли более элегантный способ сделать это? Я просмотрел документацию по np.broadcast
, но она на порядки медленнее.
In [1]: a = np.arange(10000).reshape((100,100))
In [2]: %timeit 1 + a*0
10000 loops, best of 3: 31.9 us per loop
In [3]: %timeit bc = np.broadcast(a,1);np.fromiter((v for u, v in bc),float).reshape(bc.shape)
100 loops, best of 3: 5.2 ms per loop
In [4]: 5.2e-3/32e-6
Out[4]: 162.5