我有这样一个numpy 2D数组:
[[1, 2], [3, 4]]另一个像这样的向量:[5, 6]。
本例中的操作是np.inner,这是我在2D数组的每一行和单独的向量之间获取余弦相似性这一更大任务的一部分。
我的预期输出是[np.inner([1, 2], [5, 6]), np.inner([3, 4], [5, 6]]。我可以使用apply_along_axis完成这一任务,但有没有方法将此操作矢量化并使其比apply_along_axis更具表现性?
关于如何向量化两个二维数组对之间的这些类型的操作,有很多已经回答的问题,但是在这种情况下,我需要将一个2D数组和另一个向量之间的操作向量化。我可以将[5, 6]转换成[[5, 6], [5, 6]],然后以这种方式进行矢量化,但在大范围内,我需要一个解决方案,在操作中可以使用另一个向量本身,而不是将其转换为一个带有一堆行副本的2D数组。
发布于 2020-01-19 03:35:20
听起来你需要`np.dot‘
In [3]: a = np.array([[1, 2], [3, 4]])
In [4]: b = np.array([5, 6])
In [5]: a.dot(b)
Out[5]: array([17, 39])
In [6]: np.inner(a[0], b)
Out[6]: 17
In [7]: np.inner(a[1], b)
Out[7]: 39发布于 2020-01-19 08:06:47
In [6]: A = np.array([[1,2],[3,4]]); x=np.array([5,6]) inner确实可以处理2d数组(诚然,它的文档对此有点模糊。
In [7]: np.inner(A,x)
Out[7]: array([17, 39])通常我们使用np.dot进行矩阵乘法,包括一维inner。
In [8]: np.dot(A,x)
Out[8]: array([17, 39])或者在更新的numpy中,@操作符,也就是np.matmul。
In [9]: A@x
Out[9]: array([17, 39])两者都使用B`的第2到最后一个(或x的唯一轴)的last of A和。
您想要的两个内部计算:
In [10]: np.inner(A[0,:],x)
Out[10]: 17
In [11]: np.inner(A[1,:],x)
Out[11]: 39一个(2,n)数组用(n,)数组广播,很好,产生(2,n)结果
In [12]: A * x
Out[12]:
array([[ 5, 12],
[15, 24]])
In [13]: (A * x).sum(axis=1) # and sum on the `n` axis for inner
Out[13]: array([17, 39])broadcasting具有重复行(或其他维度)的效果,但在计算上是有效的。
https://stackoverflow.com/questions/59806905
复制相似问题