首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将两个nparray相乘python

将两个nparray相乘python
EN

Stack Overflow用户
提问于 2012-04-18 01:24:53
回答 2查看 163关注 0票数 1

将两个numpy数组相乘的有效方法是什么?例如,给定

代码语言:javascript
复制
A = [1, 2, 3, 4]
B = [2, 3, 5, 7]

我想计算A和B之间的点积,它是

代码语言:javascript
复制
  A.B/|A||B| = (1*2 + 2*3 + .. 4*7)/sqrt(1^2 + 2^2... +4^2) * sqrt(.....)

我如何才能高效、快速地完成这项工作?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-04-18 01:27:31

如果你使用的是numpy,numpy.dot会帮你完成这项工作

代码语言:javascript
复制
numpy.dot(A,B)
51

向量的最快范数是

代码语言:javascript
复制
n = math.sqrt(numpy.dot(A,A.conj()))

下面是与其他方法的比较

代码语言:javascript
复制
>>> t1=timeit.Timer("n = math.sqrt(numpy.dot(A,A.conj()))","from __main__ import A,math,numpy")
>>> t2=timeit.Timer("n = math.sqrt(sum(abs(A)**2))","from __main__ import A,math")
>>> t3=timeit.Timer("numpy.linalg.norm(A)","from __main__ import A,numpy")
>>> print "%.2f usec/pass" % (1000000 * t1.timeit(number=100000)/100000)
2.82 usec/pass
>>> print "%.2f usec/pass" % (1000000 * t2.timeit(number=100000)/100000)
13.16 usec/pass
>>> print "%.2f usec/pass" % (1000000 * t3.timeit(number=100000)/100000)
15.68 usec/pass
>>> 
票数 5
EN

Stack Overflow用户

发布于 2012-04-18 01:40:26

除了numpy.dot之外,还有numpy.linalg.norm可以满足您的需求:

代码语言:javascript
复制
from numpy.linalg import norm    
from numpy import dot

dot(a,b)/(norm(a)*norm(b))

我猜您需要的是平方和的sqrt,这是norm的默认设置。这一指标称为Frobenius范数或L2范数。如果您想要一个不同的度量标准,比如Manhattan或L1规范,那么它只是一个传入的参数。

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

https://stackoverflow.com/questions/10196016

复制
相关文章

相似问题

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