为数组的索引实现np.subtract.outer([[python .... python中的结构

madf19

我有以下一组索引;

ind = array([[array([0, 1, 4])],
           [array([0, 1, 2, 5])],
           [array([1, 2, 3, 6])],
           [array([2, 3, 7])],
           [array([0, 4, 5, 8])],
           [array([1, 4, 5, 6, 9])],
           [array([ 2,  5,  6,  7, 10])],
           [array([ 3,  6,  7, 11])],
           [array([ 4,  8,  9, 12])],
           [array([ 5,  8,  9, 10, 13])],
           [array([ 6,  9, 10, 11, 14])],
           [array([ 7, 10, 11, 15])],
           [array([ 8, 12, 13])],
           [array([ 9, 12, 13, 14])],
           [array([10, 13, 14, 15])],
           [array([11, 14, 15])]])

X,如下所示

X = array([[ 0.        ,  0.        ],
           [ 0.33333333,  0.        ],
           [ 0.66666667,  0.        ],
           [ 1.        ,  0.        ],
           [ 0.        ,  0.33333333],
           [ 0.33333333,  0.33333333],
           [ 0.66666667,  0.33333333],
           [ 1.        ,  0.33333333],
           [ 0.        ,  0.66666667],
           [ 0.33333333,  0.66666667],
           [ 0.66666667,  0.66666667],
           [ 1.        ,  0.66666667],
           [ 0.        ,  1.        ],
           [ 0.33333333,  1.        ],
           [ 0.66666667,  1.        ],
           [ 1.        ,  1.        ]])

有没有不使用forloop以下矩阵的有效方法

A = [X[0,0]-X[0,0]  X[0,0]-X[1,0]  X[0,0]-X[4,0]
    X[1,0]-X[0,0]  X[1,0]-X[1,0]  X[1,0]-X[2,0] X[1,0]-X[5,0]
    X[2,0]-X[1,0]  X[2,0]-X[2,0]  X[2,0]-X[3,0] X[2,0]-X[6,0] 
    ...
    ...
    ...
   X[15,0]-X[11,0] X[15,0]-X[14,0] X[15,0]-X[15,0] ]

我已经尝试过np.subtract.outer和np.subtract。ind结构非常难以使用(就简单地使用X[ind,0]让说而言)。我宁愿不更改ind结构。寻找切肉刀的方式而无需forloop实现矩阵A

谢谢你的帮助

索洛GP卡斯特罗

如果转换索引数组,例如:

ind = ind.flatten()

您可以获得想要做的事情:

a = X[:,0]
ans = [np.ones(len(i))*a[0]-a[i] for i in ind]

使用您的原始定义,ind您必须i[0]改为使用


编辑:这可以改进为(如@Jaime所建议):

ans = [a[0] - a[i] for i in ind]

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章