擴展B
到2D
,然後除以 -
A/B[:,None].astype(float)
採樣運行 -
In [9]: A
Out[9]:
array([[ 2, 4],
[ 6, 8],
[10, 12]])
In [10]: B
Out[10]: array([1, 2, 4])
In [11]: A/B[:,None].astype(float)
Out[11]:
array([[ 2. , 4. ],
[ 3. , 4. ],
[ 2.5, 3. ]])
或者使用from __future__ import division
這需要部門的注意導致浮動PT陣列 -
In [14]: from __future__ import division
In [15]: A/B[:,None]
Out[15]:
array([[ 2. , 4. ],
[ 3. , 4. ],
[ 2.5, 3. ]])
與繁殖性能提升的倒數 -
In [32]: A = np.random.rand(300,200)
In [33]: B = np.random.rand(300)
In [34]: from __future__ import division
In [35]: %timeit A/B[:,None]
1000 loops, best of 3: 336 µs per loop
In [36]: %timeit A*(1.0/B[:,None])
10000 loops, best of 3: 101 µs per loop
這個更多信息可以發現here
。此外,如果B
的值非常接近0
,則需要謹慎使用此方法。
你試過'np.reshape([1,2,4],(3,1))'嗎?一個(10,)數組可以播放到(1,10)和到(2,10)。但在另一端添加維度需要您採取明確的行動。 – hpaulj
[通用廣播規則](https://docs.scipy.org/doc/numpy/user/basics.broadcasting.html#general-broadcasting-rules) – wwii