首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >python中的"outer“类似于Mathematica

python中的"outer“类似于Mathematica
EN

Stack Overflow用户
提问于 2018-08-06 05:22:31
回答 2查看 108关注 0票数 1

我有几个粒子的2D位置(x,y)的数组。在Mathematica中,如果pos是一个形状为(n,2)的数组,其中n是粒子的数量,那么我可以使用Outer[Subtract, pos, pos, 1],上面的数学代码的结果是一个n x n x 2数组,这个矩阵的每个i,j元素都是(x_i - x_j, y_i - y_j)运算的结果。

例如

代码语言:javascript
复制
pos = {{x1, y1}, {x2, y2}, {x3, y3}};
Outer[Subtract, pos, pos, 1]

给出

代码语言:javascript
复制
{
 {{0, 0}, {x1 - x2, y1 - y2}, {x1 - x3, y1 - y3}}
 ,
 {{-x1 + x2, -y1 + y2}, {0, 0}, {x2 - x3, y2 - y3}}
 ,
 {{-x1 + x3, -y1 + y3}, {-x2 + x3, -y2 + y3}, {0, 0}}
}

它是一个3x3x2的阵列。然而,在python中,我无法获得类似的结果:

代码语言:javascript
复制
import numpy as np
pos = [[1, 2], [5, 6], [8, 9]]
print (np.subtract.outer(pos, pos).shape)

给出(3, 2, 3, 2),而np.subtract.outer(pos, pos)

代码语言:javascript
复制
array([[[[ 0, -1],
     [-4, -5],
     [-7, -8]],

    [[ 1,  0],
     [-3, -4],
     [-6, -7]]],


   [[[ 4,  3],
     [ 0, -1],
     [-3, -4]],

    [[ 5,  4],
     [ 1,  0],
     [-2, -3]]],


   [[[ 7,  6],
     [ 3,  2],
     [ 0, -1]],

    [[ 8,  7],
     [ 4,  3],
     [ 1,  0]]]])

而对于类似的值,Mathemtica代码给出了我所需要的,即

代码语言:javascript
复制
{
{{0, 0}, {-4, -4}, {-7, -7}}
,
{{4, 4}, {0, 0}, {-3, -3}}
, 
{{7, 7}, {3, 3}, {0, 0}}
}
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51698356

复制
相关文章

相似问题

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