在Numyp中选择矩阵的非矩形子矩阵?

时间:2020-05-28 15:13:34

标签: numpy matrix numpy-slicing

假设ANM的矩阵,而idxNP的整数矩阵range(M)。我想要一个N的{​​{1}}乘P子矩阵,将其命名为A,使得每个BB[i, :] == A[i, idx[i, :]]。实现此目的的正确切片方法是什么?

例如,假设

i in range(M)

我想找到

>> a = np.arange(24).reshape((4, 6))  # N = 4, M = 6
>> a
array([[ 0,  1,  2,  3,  4,  5],
   [ 6,  7,  8,  9, 10, 11],
   [12, 13, 14, 15, 16, 17],
   [18, 19, 20, 21, 22, 23]])
>> idx = np.array([[1, 2, 3, 4],\
   [1, 2, 3, 4],\
   [2, 3, 4, 5],\
   [1, 2, 3, 4]])

这样

>> b = A[some_magic_slice] 

我当时以为>> b = array([[ 1, 2, 3, 4], [ 7, 8, 9, 10], [14, 15, 16, 17], [19, 20, 21, 22]]) 就可以了。但是事实并非如此。甚至a[idx]都提供3D数组。到目前为止,我找到的解决方案是

a[:, idx]

但是我认为这太过分了。 (基本上,无缘无故需要创建并存储一个巨大的 >> idx2 = np.tile(np.arange(4).reshape((-1, 1)), (1, 4)) >> b = a[idx2, idx] ×N矩阵!)

实现此目标的正确(有效)切片是什么?

0 个答案:

没有答案