Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 用2d numpy阵列广播一维numpy阵列_Python_Python 2.7_Numpy_Array Broadcasting - Fatal编程技术网

Python 用2d numpy阵列广播一维numpy阵列

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的轴(因为其

这可能是一个非常简单的问题,但我没有弄明白这一点

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

我想将数组A除以数组B,结果是:

   [[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