用2d numpy数组广播1d numpy数组

这可能是一个非常简单的问题,但我没有想到这一点。

我有一个二维numpy数组,形状(3,2)和一维形状(3,)的一维数组:

    A = [[2,4],[6,8][10,12]]
    B = [1,2,4]

我想通过数组B分割数组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. ]])

或者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 ,则需要谨慎使用此方法。

链接地址: http://www.djcxy.com/p/68107.html

上一篇: Broadcasting a 1d numpy array with a 2d numpy array

下一篇: averaging over subsets of array in numpy