有效地重新排列多维数组的列
rearrange columns of multidimensional arrays efficiently
我相当确定这个问题有一个几乎微不足道的解决方案,但就我的生活而言,我现在似乎无法弄清楚,也无法在网上找到任何东西,所以请耐心等待。
我有一个大小为 (n x m x m) 的 3D 数组,称为 v(将其视为 n (m x m) 矩阵。)
我希望根据从排序中获得的索引重新排列每个矩阵中的列。
因此我有索引,idxs,(n x m),我希望用它重新排列矩阵。
现在我可以这样重新排列了:
V = np.empty_like(v)
for i in range(v.shape[0]):
V[i,:,np.arange(len(idxs[0]))] = v[i,:,idxs[i,:]]
但这是一个非常慢的操作。
有没有人有更好的方法来重新排列?
使用迭代器作为 ranged-array for advanced-indexing 的矢量化方式 -
I = np.arange(v.shape[0])[:,None]
V[I,:,np.arange(len(idxs[0]))] = v[I,:,idxs]
另一个简单地索引到 v
直接得到 V
-
V = v[np.arange(v.shape[0])[:,None],:,idxs].swapaxes(1,2)
我相当确定这个问题有一个几乎微不足道的解决方案,但就我的生活而言,我现在似乎无法弄清楚,也无法在网上找到任何东西,所以请耐心等待。
我有一个大小为 (n x m x m) 的 3D 数组,称为 v(将其视为 n (m x m) 矩阵。) 我希望根据从排序中获得的索引重新排列每个矩阵中的列。
因此我有索引,idxs,(n x m),我希望用它重新排列矩阵。
现在我可以这样重新排列了:
V = np.empty_like(v)
for i in range(v.shape[0]):
V[i,:,np.arange(len(idxs[0]))] = v[i,:,idxs[i,:]]
但这是一个非常慢的操作。
有没有人有更好的方法来重新排列?
使用迭代器作为 ranged-array for advanced-indexing 的矢量化方式 -
I = np.arange(v.shape[0])[:,None]
V[I,:,np.arange(len(idxs[0]))] = v[I,:,idxs]
另一个简单地索引到 v
直接得到 V
-
V = v[np.arange(v.shape[0])[:,None],:,idxs].swapaxes(1,2)