首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将二维数组和另一个向量之间的操作矢量化?

如何将二维数组和另一个向量之间的操作矢量化?
EN

Stack Overflow用户
提问于 2020-01-19 03:28:09
回答 2查看 139关注 0票数 2

我有这样一个numpy 2D数组:

代码语言:javascript
复制
[[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数组。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-01-19 03:35:20

听起来你需要`np.dot‘

代码语言:javascript
复制
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
票数 3
EN

Stack Overflow用户

发布于 2020-01-19 08:06:47

代码语言:javascript
复制
In [6]: A = np.array([[1,2],[3,4]]); x=np.array([5,6])                                           

inner确实可以处理2d数组(诚然,它的文档对此有点模糊。

代码语言:javascript
复制
In [7]: np.inner(A,x)                                                                            
Out[7]: array([17, 39])

通常我们使用np.dot进行矩阵乘法,包括一维inner

代码语言:javascript
复制
In [8]: np.dot(A,x)                                                                              
Out[8]: array([17, 39])

或者在更新的numpy中,@操作符,也就是np.matmul

代码语言:javascript
复制
In [9]: A@x                                                                                      
Out[9]: array([17, 39])

两者都使用B`的第2到最后一个(或x的唯一轴)的last of A和。

您想要的两个内部计算:

代码语言:javascript
复制
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)结果

代码语言:javascript
复制
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具有重复行(或其他维度)的效果,但在计算上是有效的。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59806905

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档