我有以下一组索引;
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
的方式。谢谢你的帮助
最佳答案
如果转换索引数组,例如:
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]
关于python - 为数组的索引实现np.subtract.outer([[array…python中的结构,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24948939/