通过使用另一个数组作为沿轴的切片索引来切片数组

2024-05-15 00:28:43 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我有一个如下所示的数组:

arr = [[1, 2, 3],
       [4, 5, 6],
       [7, 8, 9]]

我还有另一个数组slicer = [1,3,2]。我想应用这些值作为轴0上的切片索引沿轴1测量。你知道吗

这不起作用(事实上也没有办法指定沿着部分是ndarray中的轴1),但是假设我尝试了arr[:slicer, :]

我希望得到

out = [[1,   2,   3],
       [nan, 5,   6],
       [nan, 8, nan]]

它是应用片arr[:1, :]arr[:3, :]arr[:2, :]然后分别从这些列中选择第1、第2和第3列并重新组合到上面的数组中,删除缺失的值的组合。你知道吗

我想避免循环,并试图找到一个快速矢量化的解决方案


Tags: 切片数组nan解决方案out矢量化slicerndarray
1条回答
网友
1楼 · 发布于 2024-05-15 00:28:43

对于此操作,您需要首先生成一个布尔索引掩码,该掩码标记要设置为nan的所有字段。广播使执行“外部比较”变得容易,从而产生所需的结果

slicer = numpy.asarray([1, 3, 2])
mask = numpy.arange(3)[:, None] >= slicer
mask
# array([[False, False, False],
#        [ True, False, False],
#        [ True, False,  True]])

然后您可以简单地使用这个掩码来索引data

data = numpy.arange(1, 10, dtype=float).reshape(3, 3)
data[mask] = numpy.nan
data
# array([[ 1.,  2.,  3.],
#        [nan,  5.,  6.],
#        [nan,  8., nan]])

相关问题 更多 >

    热门问题