Python 用2d numpy阵列广播一维numpy阵列
这可能是一个非常简单的问题,但我没有弄明白这一点 我有一个二维numpy数组,它的形状是(3,2),还有一个一维数组的形状是(3,2): 我想将数组A除以数组B,结果是:Python 用2d numpy阵列广播一维numpy阵列,python,python-2.7,numpy,array-broadcasting,Python,Python 2.7,Numpy,Array Broadcasting,这可能是一个非常简单的问题,但我没有弄明白这一点 我有一个二维numpy数组,它的形状是(3,2),还有一个一维数组的形状是(3,2): 我想将数组A除以数组B,结果是: [[2,4],[3,4][2.5,3]] 但是numpy不会让我这么做,我想是因为形状不对。我得到了熟悉的“操作数无法与形状(10,2)(10,)”一起广播”错误 我尝试过重塑和swapaxis,但不起作用。我更希望能够在不使用for循环的情况下执行此操作(因为我需要对大型阵列执行多次),并且不必交换阵列a的轴(因为其
[[2,4],[3,4][2.5,3]]
但是numpy不会让我这么做,我想是因为形状不对。我得到了熟悉的“操作数无法与形状(10,2)(10,)”一起广播”错误
我尝试过重塑和swapaxis,但不起作用。我更希望能够在不使用for循环的情况下执行此操作(因为我需要对大型阵列执行多次),并且不必交换阵列a的轴(因为其他阵列都是此形状)
你们能帮帮我吗?把
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. ]])
或者使用uuu future uuuu导入除法中的,该除法负责除法以生成浮动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
可以找到更多关于这方面的信息。此外,使用此方法时需要小心,如果B
的值非常接近0
您是否尝试过np。重塑([1,2,4],(3,1))
?(10,)阵列可以广播到(1,10)和(2,10)。但在另一端添加维度需要您采取明确的行动。
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