在Python中切片列表:是否有类似于0的内容?

2024-06-25 22:33:13 发布

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

我有一个三维数组,想把它分成许多子卷。 这是我目前的代码:

# this results in a 3D array
arr = trainMasks[0, 0, :, :, :]
crop = 3
arrs = [arr[x:-(crop - x), y:-(crop - y), z:-(crop - z)]
        for x in range(crop + 1)
        for y in range(crop + 1)
        for z in range(crop + 1)]
  • 如果我使用x in range(crop)x只升到crop - 1,那么x维度中的最后一个条目总是被删除
  • 如果我使用x in range(crop+1)x它上升到crop,这将导致一个切片arr[crop:-0, ...],它的形状是[0, y_dim, z_dim]

我知道通常的答案,只要降低上限,像这样:arr[crop:, :, :]。通常这很方便。但是在列表中我该怎么做呢?你知道吗


Tags: 代码incropfor条目range数组this
2条回答

将三元if..elseNone一起使用:

>>> 'abc'[:None if 1 else -1]
'abc'
>>> 'abc'[:None if 0 else -1]
'ab'

在这种情况下,最好避免负指数。你知道吗

记住,对于i>0a[-i]等价于a[len(a)-i]。但在您的情况下,您还需要为i==0工作。你知道吗

这样做有效:

d1, d2, d3 = arr.shape
arrs = [arr[ x : d1-(crop-x), y : d2-(crop-y), z : d3-(crop-z)]
        for x in range(crop + 1)
        for y in range(crop + 1)
        for z in range(crop + 1)]

相关问题 更多 >