用二维数字阵列广播一维纽比阵列

2024-09-26 22:13:50 发布

您现在位置:Python中文网/ 问答频道 /正文

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

我有一个2D numpy数组,它是形状(3,2)和1D数组(3,):

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

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

^{pr2}$

但是纽比不会让我这么做的,我想是因为形状不对。我得到了熟悉的'操作数不能与形状(10,2)(10,)'一起广播'的错误。在

我尝试过整形和swapaxis,但是没有用。我更希望能够在没有for循环的情况下这样做(因为对于大型数组我需要多次这样做),也不必交换数组a的轴(因为其他数组都是这样的)。在

你们能帮帮我吗?在


Tags: numpyfor错误情况数组形状pr2帮帮我
1条回答
网友
1楼 · 发布于 2024-09-26 22:13:50

B扩展到2D,然后除以-

A/B[:,None].astype(float)

样本运行-

^{pr2}$

或者使用负责除法的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

关于这个的更多信息可以在^{}找到。另外,如果B的值与0非常接近,那么使用这个方法需要小心。在

相关问题 更多 >

    热门问题