gpt4 book ai didi

python - 不均匀形状阵列的哈达玛积

转载 作者:行者123 更新时间:2023-12-01 07:55:31 26 4
gpt4 key购买 nike

我正在制作一大堆 hadamard 产品,作为机器学习项目的一部分。为了传达这个问题,下面是设置:

# shape: (2, 3)
In [17]: arr1
Out[17]:
array([[0.44486617, 0.21001534, 0.63833794],
[0.90878526, 0.61692562, 0.01978946]])

# shape: (5, 3)
In [18]: arr2
Out[18]:
array([[0.00640485, 0.22768134, 0.62845291],
[0.58168743, 0.65527711, 0.14765079],
[0.61389269, 0.38546809, 0.62696518],
[0.73977707, 0.03737199, 0.45905132],
[0.51932163, 0.00119124, 0.07241033]])

现在,我想对 arr1 中的每一行与 arr2 执行 hadamard 乘积,从而获得结果数组,将其称为 res code>,形状为 (10, 3)

 (2, 3)
* |
(5, 3)
||
(10,3)

我们怎样才能仅使用 NumPy 以尽可能少的开销来做到这一点?

最佳答案

我们可以利用broadcasting将其中一个数组扩展为 3D 后 -

(a[:,None]*b).reshape(-1,a.shape[1]) # a,b are input arrays

对于大型数组,为了通过多核使用实现内存效率并从而提高性能,我们可以使用 numexpr module -

import numexpr as ne

ne.evaluate('a3D*b',{'a3D':a[:,None]}).reshape(-1,a.shape[1])

时间安排 -

In [20]: a = np.random.rand(200,30)

In [21]: b = np.random.rand(500,30)

In [22]: %timeit (a[:,None]*b).reshape(-1,a.shape[1])
100 loops, best of 3: 4.61 ms per loop

In [27]: %timeit ne.evaluate('a3D*b',{'a3D':a[:,None]}).reshape(-1,a.shape[1])
100 loops, best of 3: 2.28 ms per loop

关于python - 不均匀形状阵列的哈达玛积,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56003237/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com