gpt4 book ai didi

python - Python 中点积的元素均值(numpy)

转载 作者:太空宇宙 更新时间:2023-11-04 06:19:19 27 4
gpt4 key购买 nike

我有两个 numpy 矩阵(或稀疏等效矩阵),例如:

>>> A = numpy.array([[1,0,2],[3,0,0],[4,5,0],[0,2,2]])
>>> A
array([[1, 0, 2],
[3, 0, 0],
[4, 5, 0],
[0, 2, 2]])
>>> B = numpy.array([[2,3],[3,4],[5,0]])
>>> B
array([[2, 3],
[3, 4],
[5, 0]])

>>> C = mean_dot_product(A, B)
>>> C
array([[6 , 3],
[6 , 9],
[11.5, 16],
[8 , 8]])

其中 C[i, j] = sum(A[i,k] * B[k,j])/count_nonzero(A[i,k] * B[k,j])

在 numpy 中有快速执行此操作的方法吗?

一个不理想的解决方案是:

>>> maskA = A > 0
>>> maskB = B > 0

>>> maskA.dtype=numpy.uint8
>>> maskB.dtype=numpy.uint8

>>> D = replace_zeros_with_ones(numpy.dot(maskA,maskB))

>>> C = numpy.dot(A,B) / D

谁有更好的算法?

此外,如果A或B是稀疏矩阵,使它们成为稠密矩阵(将零替换为一)会使内存占用激增!

最佳答案

为什么需要 replace_zeros_with_ones?我删除了这一行并运行您的代码并获得了正确的结果。

如果所有的数字都不是负数,你可以只用一行来做到这一点:

np.dot(A, B)/np.dot(np.sign(A), np.sign(B))

关于python - Python 中点积的元素均值(numpy),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13519521/

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