切片表示嵌套列表的NumPy数组
我对切片(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
选择了第二个维度的前两个元素。
这里有一个很好的解释 在这里。我记得我第一次学习这个的时候,它帮助我理清了很多概念。