在不失一般性的前提下,假设我有一个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] 删除。
我来说两句