我试图找到最好的方法来计算两组向量之间的最小元素乘积。通常的矩阵乘法C=A@B
将Cij
计算为向量Ai
和B^Tj
元素的成对乘积之和。我想执行而不是最小的成对产品。我找不到一个有效的方法来用numpy在两个矩阵之间做这个。你知道吗
实现这一点的一种方法是生成A
和B
(在和之前)之间成对乘积的3D矩阵,然后在第三维上取最小值。但这将导致巨大的内存占用(实际上我不知道如何做到这一点)。你知道吗
你知道我怎么做这个手术吗?你知道吗
示例:
A = [[1,1],[1,1]]
B = [[0,2],[2,1]]
矩阵矩阵:
C = [[1*0+1*2,1*2+1*1][1*0+1*2,1*2+1*1]] = [[2,3],[2,3]]
最小材料:
C = [[min(1*0,1*2),min(1*2,1*1)][min(1*0,1*2),min(1*2,1*1)]] = [[0,1],[0,1]]
在将} -
A
扩展到3D
之后使用^{如果您关心内存占用,请使用^{} module 来提高效率-
大型阵列上的计时-
因此,
numexpr
有一些改进,但可能没有我预期的那么多。你知道吗Numba也可以是一个选项
我对Numexpr的计时不是特别好感到有点惊讶,所以我尝试了一个Numba版本。对于大型阵列,这可以进一步优化。(可以应用与dgemm相同的原理)
计时
相关问题 更多 >
编程相关推荐