我正在寻找一种有效的Python方法,根据条件测试沿ndarray中的单个轴设置nth值。这是一个例子。

初始ndarray:

array([[[111, 112, 113, 114],
        [121, 122, 123, 124]],

       [[211, 212, 213, 214],
        [221, 222, 223, 224]],

       [[311, 312, 313, 314],
        [321, 322, 323, 324]]])


我想测试沿最内轴(轴2)在2位置的项目,换句话说,此示例中所有恰好以3结尾的数字。如果该数字低于截止值,我们将例如215,然后将该值设置为0。

结果如下所示:

array([[[111, 112, 0, 114],
        [121, 122, 0, 124]],

       [[211, 212, 0, 214],
        [221, 222, 223, 224]],

       [[311, 312, 313, 314],
        [321, 322, 323, 324]]])


我尝试了布尔索引,numpy.where等的组合,但是在使用花哨索引的同时沿特定轴隔离第n个项目似乎比我能找到的任何示例都要复杂。我希望这提出了一个有趣的问题,感谢您的帮助。

最佳答案

要访问沿轴0的所有第二列,请使用[:,:,2](或a[...,2]):

a[:,:,2]

array([[113, 123],
       [213, 223],
       [313, 323]])


要根据某些条件(例如
mask = a[:,:,2] < 215
a[:,:,2][mask] = 0


结果:

array([[[111, 112,   0, 114],
        [121, 122,   0, 124]],

       [[211, 212,   0, 214],
        [221, 222, 223, 224]],

       [[311, 312, 313, 314],
        [321, 322, 323, 324]]])

09-30 14:54