numpy数组比原生的Python列表更为紧凑和高效,尤其是在多维的情况下。但与列表不同的是,数组的语法要求更为严格:数组必须是同构的。这意着数组项不能混合使用不同的数据类型,而且不能对不同数据类型的数组项进行匹配操作。
传呼机numpy数组的方式很多。可以使用函数array(),基于类数组(array-like)数据创建数组。所谓的类数组数据可以是列表、元组或另一个数组。numpy基于数据本身推断出数组元素的类型,当然,你也可以给array()传递确定的dtype参数。numpy支持的数据类型接近二十种,例如bool_、int64、unint64、float64和<U32(针对Unicode字符串)。
为获得较高的效率,numpy在创建一个数组时,不会讲将数据从源复制到新数组,而是建立起数据间的连接。也就是说,在默认情况下,numpy数组相当于是其底层数据的视图,而不是副本。如果底层数据对象发生改变,则相应的数组数据也会随之改变。如果你不喜欢这种方式(这是默认的处理方式,除非复制的数据量过大),可以给构造函数传递copy=True。
实际上,Python的【列表】(list)是以数组的方式实现的,而并非列表的方式,这与【列表】(list)的字面含义并不一致。由于未使用前向指针,所以Python并没有给列表预留向前指针的存储空间。Python的大型列表只比【真正的】numpy数组多使用约13%的存储空间,但对于一些简单的内置操作,比如sum(),使用列表则则要比数组快5到10倍。因此在使用numpy之前,应该问问自己是否真的需要用到某些numpy特有的功能!
接下来,我们来创建第一个数组:前10个正整数组成的简单数组:
import numpy as np
numbers=np.array(range(1,11),copy=True)
print(type(numbers))
print(numbers)
结果:
<class 'numpy.ndarray'>
[ 1 2 3 4 5 6 7 8 9 10]
函数ones()、zeros()和empty()分别构造全1的数组、全0数组和尚未初始化的数组。这些函数必须有数组的形式参数,该出纳和素