使用 2d numpy 数组广播 1d numpy 数组
Broadcasting a 1d numpy array with a 2d numpy array
这可能是一个非常简单的问题,但我没有弄明白。
我有一个形状为 (3,2) 的二维 numpy 数组和一个形状为 (3,) 的一维数组:
A = [[2,4],[6,8][10,12]]
B = [1,2,4]
我想将数组 A 除以数组 B,得到:
[[2,4],[3,4][2.5,3]]
但是numpy不会让我这样做,我想是因为形状不对。我收到熟悉的 'operands could not be broadcast together with shapes (10,2) (10,)' 错误。
我尝试了 reshape 和 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
可以找到更多关于此的信息 。此外,如果 B
的值非常接近 0
.
,则需要小心使用此方法。
这可能是一个非常简单的问题,但我没有弄明白。
我有一个形状为 (3,2) 的二维 numpy 数组和一个形状为 (3,) 的一维数组:
A = [[2,4],[6,8][10,12]]
B = [1,2,4]
我想将数组 A 除以数组 B,得到:
[[2,4],[3,4][2.5,3]]
但是numpy不会让我这样做,我想是因为形状不对。我收到熟悉的 'operands could not be broadcast together with shapes (10,2) (10,)' 错误。
我尝试了 reshape 和 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
可以找到更多关于此的信息 B
的值非常接近 0
.