如何根据最后一个元素访问np数组元素

时间:2017-08-15 14:14:01

标签: python arrays numpy

实际上,我正在对numpy array进行序列操作,因此,我想知道如何快速访问a[i]

(因为我在最后一个循环中访问了a[i-1],因此,在c++中,我们可以通过向a[i]的地址添加1来访问a[i-1],但我不知道是否有可能在numpy。谢谢。

2 个答案:

答案 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时,它们作为本机机器代码的速度执行。这种性能优势远远超出了引用局部性的微小影响,并且避免了使用简单的数组获得的调度表模块。