如何使用numpy中的指定索引从3D矩阵中获取元素?

潜行
  • 我有一个3D矩阵,在下面的示例中,它是一个(5,4,2)矩阵: data_matrix
  • 我有另一个形状为(5,4)的索引数组,其中数组的每一行代表元素的位置: indx_array

我不知道该如何领取required_output我正在尝试根据来安排每行的(1,2)个元素indx_array

我不想用于循环!

data_matrix = np.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]], 
    [[24, 25], [26, 27], [28, 29], [30, 31]], 
    [[32, 33], [34, 35], [36, 37], [38, 39]]
])

indx_array = np.array([[3,2,1,0], [0,1,2,3], [1,0,3,2], [0,3,1,2], [1,2,3,0]])


# I want following result:
required_output = [
    [[6, 7], [4, 5], [2, 3], [0, 1]]
    [[8, 9], [10, 11], [12, 13], [14, 15]]
    [[18, 19], [16, 17], [22, 23], [20, 21]]
    [[24, 25], [30, 31], [26, 27], [28, 29]]
    [[34, 35], [36, 37], [38, 39], [32, 33]]
]

编辑:更新了indx_array以更好地说明情况。

hpaulj
In [637]: data_matrix.shape                                                                          
Out[637]: (5, 4, 2)
In [638]: indx_array.shape                                                                           
Out[638]: (5, 4)

您需要在前两个维度上进行高级索引编制。第一维数组需要与第二维数组(5,4)进行广播。为此,我做了(5,1)arange

In [639]: data_matrix[np.arange(5)[:,None], indx_array]                                              
Out[639]: 
array([[[ 6,  7],
        [ 4,  5],
        [ 2,  3],
        [ 0,  1]],

       [[ 8,  9],
        [10, 11],
        [12, 13],
        [14, 15]],

       [[18, 19],
        [16, 17],
        [22, 23],
        [20, 21]],

       [[24, 25],
        [30, 31],
        [26, 27],
        [28, 29]],

       [[34, 35],
        [36, 37],
        [38, 39],
        [32, 33]]])

将我的(5,1)索引与接受的_x对比一下(5,4)的索引)进行对比

In [640]: np.arange(5)[:,None]                                                                       
Out[640]: 
array([[0],
       [1],
       [2],
       [3],
       [4]])
In [641]: _x = np.repeat(np.arange(indx_array.shape[0]),indx_array.shape[1])                         
In [643]: _x                                                                                         
Out[643]: array([0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4])

广播_x不需要重复(5,4); (5,1)就足够了。

广播进行虚拟重复。这可以用以下broadcast_to函数说明

In [648]: np.broadcast_to(np.arange(5)[:,None],(5,4))                                                
Out[648]: 
array([[0, 0, 0, 0],
       [1, 1, 1, 1],
       [2, 2, 2, 2],
       [3, 3, 3, 3],
       [4, 4, 4, 4]])
In [649]: _.strides                                                                                  
Out[649]: (8, 0)

就是这样,0大步重复,没有复制。as_strided是最有用的stride_tricks功能,尤其是在执行诸如移动窗口之类的操作时。通常,我们只是让自动广播来完成工作,而不必过多担心操作方式。

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何使用逻辑索引MATLAB获取3d矩阵中每个切片中某些区域的平均值

来自分类Dev

在3D矩阵中查找索引

来自分类Dev

如何基于python中的第一个元素获取最大的3D矩阵

来自分类Dev

numpy中的3d矩阵乘法

来自分类Dev

边界元素索引3D矩阵

来自分类Dev

如何做3个向量的外积以在numpy中创建3d矩阵?(与nd相同)

来自分类常见问题

numpy:如何使用矩阵元素作为索引?

来自分类Dev

numpy:如何使用矩阵元素作为索引?

来自分类Dev

CUDA中的3D元素矩阵乘法?

来自分类Dev

如何使用PyTorch从3D张量中删除元素?

来自分类Dev

如何在MATLAB中从3D矩阵的每一行中选择矢量元素?

来自分类Dev

如何在python中使用numpy获取二维矩阵(列表)中具有最多给定元素的列和行的索引

来自分类Dev

NumPy中的3D数组索引以减少行数

来自分类Dev

Python 3:在不使用NumPy的情况下获取关于矩阵中某个点的矩阵(列表列表)的对角元素

来自分类Dev

numpy:给出矩阵的非零索引如何将元素提取到子矩阵中

来自分类Dev

numpy中的矩阵索引

来自分类Dev

如何从该矩阵生成的列表中获取矩阵中元素的索引?

来自分类Dev

我应该如何用numpy将3d数组中的1d数组乘以2d矩阵

来自分类Dev

获取沿3D矩阵每个维度的索引

来自分类Dev

如何在Matlab中输入3D矩阵?

来自分类Dev

如何在python中顺序填充3d矩阵?

来自分类Dev

从2D矩阵中基于3D矩阵的位置获取值

来自分类Dev

反转NumPy中3D矩阵的所有子矩阵

来自分类Dev

如何替换矩阵指定列中的元素?

来自分类Dev

在Matlab中从3D矩阵绘图

来自分类Dev

R中的3D矩阵求和

来自分类Dev

在Matlab中创建3D矩阵

来自分类Dev

R中的3D矩阵求和

来自分类Dev

numpy二维数组-从指定索引中获取N个元素

Related 相关文章

  1. 1

    如何使用逻辑索引MATLAB获取3d矩阵中每个切片中某些区域的平均值

  2. 2

    在3D矩阵中查找索引

  3. 3

    如何基于python中的第一个元素获取最大的3D矩阵

  4. 4

    numpy中的3d矩阵乘法

  5. 5

    边界元素索引3D矩阵

  6. 6

    如何做3个向量的外积以在numpy中创建3d矩阵?(与nd相同)

  7. 7

    numpy:如何使用矩阵元素作为索引?

  8. 8

    numpy:如何使用矩阵元素作为索引?

  9. 9

    CUDA中的3D元素矩阵乘法?

  10. 10

    如何使用PyTorch从3D张量中删除元素?

  11. 11

    如何在MATLAB中从3D矩阵的每一行中选择矢量元素?

  12. 12

    如何在python中使用numpy获取二维矩阵(列表)中具有最多给定元素的列和行的索引

  13. 13

    NumPy中的3D数组索引以减少行数

  14. 14

    Python 3:在不使用NumPy的情况下获取关于矩阵中某个点的矩阵(列表列表)的对角元素

  15. 15

    numpy:给出矩阵的非零索引如何将元素提取到子矩阵中

  16. 16

    numpy中的矩阵索引

  17. 17

    如何从该矩阵生成的列表中获取矩阵中元素的索引?

  18. 18

    我应该如何用numpy将3d数组中的1d数组乘以2d矩阵

  19. 19

    获取沿3D矩阵每个维度的索引

  20. 20

    如何在Matlab中输入3D矩阵?

  21. 21

    如何在python中顺序填充3d矩阵?

  22. 22

    从2D矩阵中基于3D矩阵的位置获取值

  23. 23

    反转NumPy中3D矩阵的所有子矩阵

  24. 24

    如何替换矩阵指定列中的元素?

  25. 25

    在Matlab中从3D矩阵绘图

  26. 26

    R中的3D矩阵求和

  27. 27

    在Matlab中创建3D矩阵

  28. 28

    R中的3D矩阵求和

  29. 29

    numpy二维数组-从指定索引中获取N个元素

热门标签

归档