【问题标题】:dot product of subarrays without for loop没有 for 循环的子数组的点积
【发布时间】:2014-11-18 23:29:32
【问题描述】:

当我们有:

array 1: A, shape (49998,3,3) 
array 2: B, shape (3, 49998)

我想将它们的子数组相乘得到

array 3: C, shape(3,49998)

我使用生成器:

def genC(A,B):
    for a,b in itertools.izip(A,B.T):
        c=np.dot(a,b)
        yield c.T[0]

C=np.array([c for c in genC()]).T

那么我如何在没有 for 循环的情况下在 A、B 内部进行数组乘法以获得数组 C?

我试图使用np.tensordot,但我无法得到它

注意:

这只是基本示例,对于我拥有的原始数据中的一些测试 cos

4*3*37 数组 A(500 000,3,3) B(3,500 000)

to do, and for loop sems for me not pythonic way xD

【问题讨论】:

    标签: python arrays numpy dot-product


    【解决方案1】:

    如果我的代码是正确的,你想用 3 向量执行 3x3 矩阵的 49998 点积,对吗?使用np.einsum 很容易做到这一点:

    np.einsum('ijk,ki->ij', A, B)
    

    【讨论】:

    • 效果很好,快速高效!看来我应该检查一下 einsum 和类似的函数,所以也许我会杀死更多的循环 xD
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-21
    • 1970-01-01
    • 2018-02-14
    • 2012-11-28
    • 1970-01-01
    • 2017-02-03
    相关资源
    最近更新 更多