实际上,我正在对numpy array
进行序列操作,因此,我想知道如何快速访问a[i]
?
(因为我在最后一个循环中访问了a[i-1]
,因此,在c++
中,我们可以通过向a[i]
的地址添加1来访问a[i-1]
,但我不知道是否有可能在numpy。谢谢。
答案 0 :(得分:0)
我认为这是不可能的/ a[i]
是最快的方式。
Python是一种比c++
更容易学习(和使用)的编程语言,这当然是有代价的,其中一个成本是,它的速度较慢。
你所谈论的引用可能是“危险的”,因此python使得它们(人们)无法(轻松)使用它们,以保护它们免受不理解的事物的侵害。
虽然引用速度更快,但你不能在python中使用它们(因为它总是较慢,使用引用的差异与否并不重要)
答案 1 :(得分:0)
最好不要将Python NumPy: ndarray视为C ++数组。他们有很大的不同。 Python还提供了自己的本地list对象,并在其标准库中包含array模块。
Python列表的行为大致类似于通用数组(在许多编程语言中都有)。这是一个有序的序列;元素可以通过整数索引从0到(但不包括)列表的长度( len(mylist))来访问;元素范围可以使用“切片”表示法( mylist [start_offset:end_offset] )访问,返回另一个列表对象;负索引被视为列表末尾的偏移量( mylist [-1] 是列表的最后一项),依此类推。
此外,它们还支持许多方法,例如 .count(), .find()和 .replace()。
与大多数编程语言中的数组不同,Python列表是异构的。元素可以是Python中任何对象类型的任意混合,包括对嵌套列表,字典,代码,类,生成器对象和其他可调用的第一类对象的引用,当然还有自定义对象的实例。
Python数组模块允许实例化类似列表的同类对象。也就是说,您可以使用十几种原始数据类型(字符或Unicode,有符号或无符号的短整数或长整数,浮点或双精度浮点数)来实例化它们。索引和切片与Python本机列表相同。
Python array.array()实例的主要优点是,它们可以比更通用的列表对象更紧凑地存储大量元素。这些数组上的各种操作可能比通过迭代或以其他方式引用本机Python列表中的元素所执行的类似操作更快,因为在更紧凑的数组布局(内存中)中有更大的引用局部性,并且因为类型约束避免了某些操作处理广义对象时产生的调度开销。
另一方面,NumPy远比Python 数组模块复杂。
首先, ndarray 可以是多维的,可以动态重塑。通常从线性 ndarray 开始并将其重塑为矩阵或其他更高维度的结构。此外, ndarray 支持比Python array 模块更丰富的数据类型集。 NumPy还实现了一些相当高级的fancy indexing功能。
但NumPy的真正性能优势与它如何“矢量化”大多数操作,在数据结构中广播它们(可能使用CPU支持的任何SIMD功能甚至是GPU在此过程中。列举了许多常见的矩阵操作,当用Python编写适当的NumPy时,它们作为本机机器代码的速度执行。这种性能优势远远超出了引用局部性的微小影响,并且避免了使用简单的数组获得的调度表模块。