2013-02-18 87 views
-1

我有值的NX1向量。我想要做的是创建一个NxN矩阵,其中每个值表示第i个值和第j个值之间的差异 - 有点像大型相关矩阵。我已经完成了这个循环,但我正在寻找一种更优雅的方式来使用Python的矢量化功能,因为这个矢量可能会相当大。我意识到有一些问题与抽象的答案。矩阵在Python的差异,导致像MATLAB的bsxfun

我怎样才能复制MATLAB的Python中bsxfun功能?

我发布了一个关于SE的问题来发现bsxfunhere,但现在需要在Python中做同样的事情。

+0

你甚至尝试[搜索](http://stackoverflow.com/questions/8946810/is-there-an-equivalent-to-the-matlab-function-bsxfun-in-python)? – danodonovan 2013-02-18 17:09:50

+0

是的,阅读http://stackoverflow.com/questions/8946810/is-there-an-equivalent-to-the-matlab-function-bsxfun-in-python,http://stackoverflow.com/questions/12454685/翻译-A-线的 - MATLAB的bsxfun-rdivide到蟒蛇,这里的广播教程http://www.scipy.org/EricsBroadcastingDoc,你真的需要downvote?你甚至没有发布回复。 – 2013-02-18 17:14:08

回答

3

我不是你想要的东西完全清楚,但numpy的广播规则(见here的介绍),意味着大多数的时间bsxfun没有必要的,因为它只是作品(TM)。例如,如果我明白你在找什么,像

>>> a = np.array([1,3,5,7,9]) 
>>> a - a[:,None] 
array([[ 0, 2, 4, 6, 8], 
     [-2, 0, 2, 4, 6], 
     [-4, -2, 0, 2, 4], 
     [-6, -4, -2, 0, 2], 
     [-8, -6, -4, -2, 0]]) 

应该工作。

+0

啊完美。我错误地使用了a-a.T,这当然是返回一个0的数组。谢谢。 – 2013-02-18 17:18:32