NumPy ( Numerical Python)是支持 Python 语言的数值计算扩充库,其拥有强大的多维数组处理与矩阵运算能力
NumPy 是 Scipy.org 中最重要的库之一,它同时也被 Pandas,Matplotlib 等我们熟知的第三方库作为核心计算库。当你在单独安装这些库时,你会发现同时会安装 NumPy 作为依赖。
数值类型 dtype(data-type) 对象的实例
- 可以用
numpy.dtype(object, align, copy)
来指定数值类型 - 在数组里面,可以用
dtype=
参数指定数值类型
import numpy as np
a = np.array([1.1,2.2,3.3],
dtype = np.float64)
- 用
array.dtype
查看数组array
的数据类型
print(a.dtype)
# dtype('float64')
- 使用
array.astype()
方法在不同的数值类型之间相互转换
a.astype(int)
# array([1, 2, 3])
a.astype(int).dtype
# dtype('int64')
NumPy 数组生成
NumPy 中,多维数组对象ndarray
具有六个参数:
-
shape
:数组的形状。 -
dtype
:数据类型。 -
buffer
:对象暴露缓冲区接口。 -
offset
:数组数据的偏移量。 -
strides
:数据步长。 -
order
:{'C','F'}
,以行或列为主排列顺序。
在 NumPy 中,我们主要通过以下 5 种途径创建数组:
1. 从 Python 数组结构列表,元组等转换。
numpy.array(object, dtype=None, copy=True, order=None, subok=False, ndmin=0)
其中,参数:
object
:列表、元组等。
dtype
:数据类型。如果未给出,则类型为被保存对象所需的最小类型。
copy
:布尔类型,默认 True,表示复制对象。
order
:顺序。
subok
:布尔类型,表示子类是否被传递。
ndmin
:生成的数组应具有的最小维数。
2. 使用 np.arange
、np.ones
、np.zeros
等 NumPy 原生方法。
-
arange()
的功能是在给定区间内创建一系列均匀间隔的值。
numpy.arange(start, stop, step, dtype=None)
-
linspace
用于在指定的区间内返回间隔均匀的值。
numpy.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None)
-
numpy.ones
用于快速创建数值全部为1
的多维数组。
numpy.ones(shape, dtype=None, order='C')
-
zeros
方法和上面的ones
方法非常相似,不同的地方在于,这里全部填充为0
。
numpy.zeros(shape, dtype=None, order='C')
-
numpy.eye
用于创建一个单位矩阵,其特点是k
对角线上的值为1
,其余值全部为0
。
numpy.eye(N, M=None, k=0, dtype=<type 'float'>)
3. 从已知数据创建
我们还可以从已知数据文件、函数中创建 ndarray。
-
frombuffer(buffer)
:将缓冲区转换为1
维数组。 -
fromfile(file,dtype,count,sep)
:从文本或二进制文件中构建多维数组。 -
fromfunction(function,shape)
:通过函数返回值来创建多维数组。 -
fromiter(iterable,dtype,count)
:从可迭代对象创建1
维数组。 -
fromstring(string,dtype,count,sep)
:从字符串中创建1
维数组。
数组基本操作
reshape
可以在不改变数组数据的同时,改变数组的形状。其中,numpy.reshape()
等效于 ndarray.reshape()
。reshape
方法非常简单:
numpy.reshape(a, newshape)
数组展开
ravel
的目的是将任意形状的数组扁平化,变为 1 维数组。
numpy.ravel(a, order='C')
轴移动
moveaxis
可以将数组的轴移动到新的位置。
a.shape, np.moveaxis(a, 0, -1).shape
(1, 2, 3), (2, 3, 1)
轴交换
swapaxes
可以用来交换数组的轴。
numpy.swapaxes(a, axis1, axis2)
a.shape, np.swapaxes(a,0,2).shape
(1, 4, 3), (3, 4, 1)
- 数组转置
transpose
类似于矩阵的转置,它可以将 2 维数组的横轴和纵轴交换。
numpy.transpose(a, axes=None)
维度改变
atleast_xd
支持将输入数据直接视为 x
维。这里的 x
可以表示:1,2,3
。
numpy.atleast_1d()
numpy.atleast_2d()
numpy.atleast_3d()
np.atleast_1d([1,2,3]).shape, np.atleast_2d([1,2,3]).shape,np.atleast_3d([1,2,3]).shape
(3,), (1, 3), (1, 3, 1)
类型转换
在 NumPy 中,还有一系列以 as 开头的方法,它们可以将特定输入转换为数组,亦可将数组转换为矩阵、标量,ndarray
等。
-
asarray(a,dtype,order)
:将特定输入转换为数组。 -
asanyarray(a,dtype,order)
:将特定输入转换为ndarray
。 -
asmatrix(data,dtype)
:将特定输入转换为矩阵。 -
asfarray(a,dtype)
:将特定输入转换为float
类型的数组。 -
asarray_chkfinite(a,dtype,order)
:将特定输入转换为数组,检查NaN
或infs
。 -
asscalar(a)
:将大小为 1 的数组转换为标量。
数组连接
concatenate
可以将多个数组沿指定轴连接在一起。
numpy.concatenate((a1, a2, ...), axis=0)
数组堆叠
-
stack(arrays,axis)
:沿着新轴连接数组的序列。 -
column_stack()
:将 1 维数组作为列堆叠到 2 维数组中。 -
hstack()
:按水平方向堆叠数组。 -
vstack()
:按垂直方向堆叠数组。 -
dstack()
:按深度方向堆叠数组。
拆分
-
split(ary,indices_or_sections,axis)
:将数组拆分为多个子数组。 -
dsplit(ary,indices_or_sections)
:按深度方向将数组拆分成多个子数组。 -
hsplit(ary,indices_or_sections)
:按水平方向将数组拆分成多个子数组。 -
vsplit(ary,indices_or_sections)
:按垂直方向将数组拆分成多个子数组。
追加
-
append(arr,values,axis)
:将值附加到数组的末尾,并返回 1 维数组。
搜索和计数
-
argmax(a ,axis,out)
:返回数组中指定轴的最大值的索引。 -
nanargmax(a ,axis)
:返回数组中指定轴的最大值的索引,忽略 NaN。 -
argmin(a ,axis,out)
:返回数组中指定轴的最小值的索引。 -
nanargmin(a ,axis)
:返回数组中指定轴的最小值的索引,忽略 NaN。 -
argwhere(a)
:返回数组中非 0 元素的索引,按元素分组。 -
nonzero(a)
:返回数组中非 0 元素的索引。 -
flatnonzero(a)
:返回数组中非 0 元素的索引,并铺平。 -
where(条件,x,y)
:根据指定条件,从指定行、列返回元素。 -
searchsorted(a,v ,side,sorter)
:查找要插入元素以维持顺序的索引。
-
extract(condition,arr)
:返回满足某些条件的数组的元素。
-
count_nonzero(a)
:计算数组中非 0 元素的数量。
网友评论