NumPy 是一个 Python 包。 它代表 “Numeric Python”。 它是一个由多维数组对象和用于处理数组的例程集合组成的库。
类型
NumPy 中定义的最重要的对象是称为 ndarray
的 N 维数组类型。 它描述相同类型的元素集合。 可以使用基于零的索引访问集合中的项目。
ndarray中的每个元素在内存中使用相同大小的块。 ndarray中的每个元素是数据类型对象的对象(称为 dtype)。
numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)
a = np.array([1,2,3])
a = np.array([[1, 2], [3, 4]])
a = np.array([1, 2, 3,4,5], ndmin = 2)
a = np.array([1, 2, 3], dtype = complex)
astype
可以用来进行类型转换finfo
可以用来查看取值范围
1 | # 使用端记号 |
每个内建类型都有一个唯一定义它的字符代码:
- ‘b’:布尔值
- ‘i’:符号整数
- ‘u’:无符号整数
- ‘f’:浮点
- ‘c’:复数浮点
- ‘m’:时间间隔
- ‘M’:日期时间
- ‘O’:Python 对象
- ‘S’, ‘a’:字节串
- ‘U’:Unicode
- ‘V’:原始数据(void)
字节序:
http://www.ruanyifeng.com/blog/2016/11/byte-order.html
降序(Big-endian)大端字节序存储时 由左到右
升序(Little-endian)小端字节序存储时 由右向左
1byte是8bit,所以需要两位16进制
数组属性
- ndarray.shape
- 可读可写
- reshape
- 类似直接修改shape,但不修改原来的数组
- dim
- 返回数组的维度
- itemsize
- 字节单位的长度,如int8(-128~127)的字节长度为1
- flags
- C_CONTIGUOUS (C) 数组位于单一的、C 风格的连续区段内
- F_CONTIGUOUS (F) 数组位于单一的、Fortran 风格的连续区段内
- OWNDATA (O) 数组的内存从其它对象处借用
- WRITEABLE (W) 数据区域可写入。 将它设置为flase会锁定数据,使其只读
- ALIGNED (A) 数据和任何元素会为硬件适当对齐
- UPDATEIFCOPY (U) 这个数组是另一数组的副本。当这个数组释放时,源数组会由这个数组中的元素更新
数组创建
- empty:未初始化,指定shape,dtype和order
- zeros:初始化为0
- ones:初始化为1
- asarray:接受列表、列表的元组、元组、元组的元组、元组的列表等各种形式的输入,并且可以指定dtype和order
- frombuffer:缓冲区作为参数,指定dtype、count(读取的数字数量,默认-1读取全部)、offset
- fromiter:迭代器
- range:设定start、stop、step、dtype
- linspace:设定start、stop、num、endpoint(是否包含stop)、retstep(返回样例及步长)、dtype
- logspace:对数轴上均匀分布,start(起始为base ** start)、stop、num、endpoint、base(默认为10)、dtype
数组方法
切片:用起始、终止、步长。如:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15a = np.arange(10)
s = slice(2,7,2)
print a[s]
>>> a = np.arange(10)
>>> a
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
>>> a[3:8]
array([3, 4, 5, 6, 7])
>>> a[3:8:2]
array([3, 5, 7])
>>> a+9
array([ 9, 10, 11, 12, 13, 14, 15, 16, 17, 18])
>>> (a+9)[a[3:8:2]]
array([12, 14, 16])第二列用
a[...,1]
,第二行用a[1,...]
,第二列及以后所有为a[...,1:]
高级索引:
- 整数索引:
y = x[[0,1,2], [0,1,0]]
包括数组中(0,0),(1,1)和(2,0)位置处的元素。 - 布尔索引:
x[x > 5]
可以输出大于5的所有元素值,a[~np.isnan(a)]
可以过滤nan
- 整数索引:
广播
- 对数组的算术运算通常在相应的元素上进行。 如果两个阵列具有完全相同的形状,则这些操作被无缝执行。在 NumPy 中仍然可以对形状不相似的数组进行操作,因为它拥有广播功能。 较小的数组会广播到较大数组的大小,以便使它们的形状可兼容。
1
2
3
4
5
6>>> np.array([1,2])+1
array([2, 3])
>>> np.array([1,2])*3
array([3, 6])
>>> np.array([1,2])*np.array([2,3])
array([2, 6])
- 对数组的算术运算通常在相应的元素上进行。 如果两个阵列具有完全相同的形状,则这些操作被无缝执行。在 NumPy 中仍然可以对形状不相似的数组进行操作,因为它拥有广播功能。 较小的数组会广播到较大数组的大小,以便使它们的形状可兼容。
迭代:数组变成迭代器,
np.nditer
转置:直接
a.T
修改形状:reshape
flat:一维迭代器
flatten:数组副本,可以带参数order
ravel
transpose:翻转给定的维度,同
.T