切片表示嵌套列表的NumPy数组

22 投票
2 回答
54976 浏览
提问于 2025-04-16 13:56

我对切片(slicing)有点了解,但这个问题让我有点困惑。我尝试改变一些值来看看发生了什么,但还是搞不明白。

这是一个例子:

import numpy
l = numpy.array([[0, 0, 0], [0, 1, 0], [1, 0, 0], [1, 1, 1]])
print(l[:,0:2].tolist())

结果是:

[[0, 0], [0, 1], [1, 0], [1, 1]]

我试着理解这个切片的意思是“从索引 0 切到 0,2,每次增加 2”,但我觉得这没什么意义。

2 个回答

1

下面的内容适用于普通的列表。假设这是一个列表里面还有列表,并且所有的子列表长度都是一样的,那么你可以这样做(适用于Python 2)

A = [[1, 2], [3, 4], [5, 6]]
print (f"A = {A}")

flatA = sum(A, [])     # Flattens the 2D list
print (f"flatA = {flatA}")
len0 = len(A[0])
lenall = len(flatA)
B = [flatA[i:lenall:len0] for i in range(len0)] 
print (f"B = {B}")

输出结果将会是:

A = [[1, 2], [3, 4], [5, 6]]
flatA = [1, 2, 3, 4, 5, 6]
B = [[1, 3, 5], [2, 4, 6]]
18

你正在进行多轴切片。因为 l 是一个二维数组,而你想要切片的是第二个维度,所以你用逗号来表示下一个维度。

, 0:2 选择了第二个维度的前两个元素。

这里有一个很好的解释 在这里。我记得我第一次学习这个的时候,它帮助我理清了很多概念。

撰写回答