gpt4 book ai didi

python - Numpy 相当于点(A,B,3)

转载 作者:太空狗 更新时间:2023-10-30 00:50:10 25 4
gpt4 key购买 nike

假设我有两个 3 维矩阵,像这样(取自这个 matlab 示例 http://www.mathworks.com/help/matlab/ref/dot.html ):

A = cat(3,[1 1;1 1],[2 3;4 5],[6 7;8 9])
B = cat(3,[2 2;2 2],[10 11;12 13],[14 15; 16 17])

如果我想沿三维获取成对的点积,我可以在 matlab 中这样做:

C = dot(A,B,3)

这会给出结果:

C =
106 140
178 220

numpy 中的等效操作是什么,最好是矢量化选项,以避免必须在整个数组中编写双 for 循环。我似乎无法理解 np.tensordotnp.inner 应该做什么,但它们可能是选项。

最佳答案

In [169]:

A = np.dstack([[[1, 1],[1 ,1]],[[2 ,3],[4, 5]],[[6, 7],[8, 9]]])
B = np.dstack([[[2, 2],[2, 2]],[[10, 11],[12, 13]],[[14, 15], [16, 17]]])
c=np.tensordot(A, B.T,1)
np.vstack([np.diag(c[:,i,i]) for i in range(A.shape[0])]).T
Out[169]:
array([[106, 140],
[178, 220]])

但令人惊讶的是它是最慢的:

In [170]:

%%timeit
c=np.tensordot(A, B.T,1)
np.vstack([np.diag(c[:,i,i]) for i in range(A.shape[0])]).T
10000 loops, best of 3: 95.2 µs per loop
In [171]:

%timeit np.einsum('i...,i...',a,b)
100000 loops, best of 3: 6.93 µs per loop
In [172]:

%timeit inner1d(A,B)
100000 loops, best of 3: 4.51 µs per loop

关于python - Numpy 相当于点(A,B,3),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24066589/

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