向量化成对排列

用户名

在不失一般性的前提下,假设我有一个1-d数组X,可以用来构造一个Y包含所有成对排列的3-d数组的3-d数组X[i], X[j]

换一种说法:

Y = np.zeros((X.shape, X.shape,X.shape))
for i in range(len(X)):
  for j in range(len(X)):
    Y[i,j,:] = X
    Y[i,j,[i, j]] = Y[i,j,[j, i]]

可以矢量化吗?还是可以从二维索引数组中构建一些花哨的索引以进行排列?

易山

您不需要那么多的排列。但是,如果您希望获得与Y代码完全相同的代码,则可以这样做(这样做是相同的,只是代替循环,idx为所有成对排列创建高级索引):

n = X.size
idx = np.array(np.meshgrid(np.arange(n),np.arange(n))).T.reshape(-1,2)
Y = np.repeat([X],n*n,0).reshape(n,n,n)
Y[idx[:,0][:,None],idx[:,1][:,None],idx] = Y[idx[:,0][:,None],idx[:,1][:,None],idx[:,[1,0]]]

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章