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

5
如果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,:,:,:,]

3
欢迎来到Stack Overflow。阅读 这篇文章 可能会对您有帮助。此类问题的通常格式是呈现一些运行出现意外结果的代码,并描述发生了什么以及您期望的结果。答案应该帮助您解决问题。您可以编辑您的问题(在其下面找到链接)。 - holdenweb
3
它们不同之处在于它们非常不同。你可以阅读numpy文档,以了解numpy切片的工作原理。事实是,在Python中,当你实现自己的类(就像numpy那样)时,你可以定义切片来执行任何你想要的操作。 - zvone
2个回答

8

与Python内置的列表相比,numpy数组有一个重要的区别:

  • when slicing in the built-in list it creates a copy.

    X=[1,2,3,4,5,6]
    Y=X[:3]   #[1,2,3]
    

    by slicing X from 0-3 we have created a copy and stored it in the variable Y.

我们可以通过更改Y来验证,并且即使我们更改了Y,也不会影响X。
    Y[0]=20
    print(Y) # [20,2,3]
    print(X) # [1,2,3,4,5,6]
  • when slicing in numpy doesn't create a new copy but it still referring to original array

    A=np.array([1,2,3,4,5,6])
    B=A[:3]
    

通过在此处对A进行切片并将其分配给B,仍然使B引用原始数组A。

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

    B[0]=20
    print(B) # [20,2,3]
    print(A) # [20,2,3,4,5,6]

1
特别是当X非常大时,这是一个很好的观点。在numpy数组和列表之间进行切片处理可以大幅提高速度。 - Aenaon

4
主要区别在于numpy切片可以处理多个维度。 在您的示例中,curr_frames[idx,:,:,:,],数组有4个维度,您正在提供一个维度(idx)的索引并且:符号表示检索该维度的所有元素。
参考资料: NumPy 切片 Python 切片

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接