在 numpy 数组中切片和在 Python 中切片有什么区别?

Mon*_*rma 5 python numpy

如果curr_frames是一个numpy数组,最后一行是什么意思?

curr_frames = np.array(curr_frames)

idx = map(int,np.linspace(0,len(curr_frames)-1,80))

curr_frames = curr_frames[idx,:,:,:,]
Run Code Online (Sandbox Code Playgroud)

Rav*_*i G 6

从 Python 的内置列表到 numpy 数组的一个重要区别:

  • 当在内置列表中切片时,它会创建一个副本

    X=[1,2,3,4,5,6]
    Y=X[:3]   #[1,2,3]
    
    Run Code Online (Sandbox Code Playgroud)

    通过将 X 从 0-3 切片,我们创建了一个副本并将其存储在变量 Y 中。

我们可以通过改变 Y 来验证,即使我们改变 Y 也不会影响 X。

    Y[0]=20
    print(Y) # [20,2,3]
    print(X) # [1,2,3,4,5,6]
Run Code Online (Sandbox Code Playgroud)

通过在这里切片 A 并将其分配给 B,仍然 B 指的是原始数组 A。

我们可以通过改变 B 中的一个元素来验证这一点,它也会改变 A 中的值。

    B[0]=20
    print(B) # [20,2,3]
    print(A) # [20,2,3,4,5,6]
Run Code Online (Sandbox Code Playgroud)


ken*_*ait 5

主要区别在于 numpy 切片可以处理多个维度。在您的示例中curr_frames[idx,:,:,:,],数组有 4 个维度,您通过提供一维 ( idx) 的索引来进行切片,并且:符号表示检索该维度的所有维度。

参考:

NumPy 切片

Python 切片