gpt4 book ai didi

python - 如何在numpy中向量化多个矩阵乘法?

转载 作者:太空宇宙 更新时间:2023-11-04 09:52:05 24 4
gpt4 key购买 nike

对于我的意思的概念性想法,我有 2 个数据点:

x_0 = np.array([0.6, 1.4])[:, None]
x_1 = np.array([2.6, 3.4])[:, None]

和一个 2x2 矩阵:

y = np.array([[2, 2], [2, 2]])

如果我执行 x_0.T @y @x_0,我得到 array([[ 8.]])。同样,x_1.T @y @x_1 返回 array([[ 72.]])

但是有没有一种方法可以一次性执行这两项计算,而无需 for 循环?显然这里的加速可以忽略不计,但我处理的数据点比这里介绍的要多得多。

最佳答案

x作为x_0x_1等的列堆叠版本,我们可以使用np.einsum -

np.einsum('ji,jk,ki->i',x,y,x)

混合使用 np.einsummatrix-multiplcation -

np.einsum('ij,ji->i',x.T.dot(y),x)

如前所述,假定 x 是列堆叠的,如下所示:

x = np.column_stack((x_0, x_1))

运行时测试-

In [236]: x = np.random.randint(0,255,(3,100000))

In [237]: y = np.random.randint(0,255,(3,3))

# Proposed in @titipata's post/comments under this post
In [238]: %timeit (x.T.dot(y)*x.T).sum(1)
100 loops, best of 3: 3.45 ms per loop

# Proposed earlier in this post
In [239]: %timeit np.einsum('ji,jk,ki->i',x,y,x)
1000 loops, best of 3: 832 µs per loop

# Proposed earlier in this post
In [240]: %timeit np.einsum('ij,ji->i',x.T.dot(y),x)
100 loops, best of 3: 2.6 ms per loop

关于python - 如何在numpy中向量化多个矩阵乘法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47369976/

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