1. 列表与数组
列表:数据类型可以不同;
数组:数据类型相同
2. ndarray: NumPy的数组对象
NumPy是SciPy、Pandas库的基础
#1. 安装
$ pip3 install numpy
#我的服务器下显示已安装
Requirement already satisfied: numpy in ./miniconda3/lib/python3.6/site-packages (1.15.4)
#2. 引用: import numpy as np
$ python3 #进入交互式编程环境
>>> import numpy as np
>>> def npsum():
... a = np.array([0,1,2,3])
... b = np.array([3,2,1,0])
... c = a**2 + b**2
... return c
...
>>> print(npsum())
[9 5 5 9]
3. ndarray实例
ndarray在程序中叫array, np.array()用于创建一个ndarray数组。
>>> a = np.array([[1,2,3],
... [4,5,6]])
>>> a
array([[1, 2, 3],
[4, 5, 6]])
>>> print(a)
[[1 2 3]
[4 5 6]]
4. ndarray对象的属性
.ndim -- 轴/维度的数量
.shape -- 几行几列
.size -- 元素的个数
.dtype -- 元素类型
.itemsize -- 每个元素字节大小
>>> a.ndim
2
>>> a.shape
(2, 3)
>>> a.size
6
>>> a.dtype
dtype('int64')
>>> a.itemsize
8
5. ndarray数组的创建方法
- 从Python列表、元组类型创建ndarray数组
x = np.array(list/tuple[, dtype=np.float32])
eg: x = np.array([[1,2],(3,4)]) - 使用NumPy中的函数创建:np.arrange(n)生成0到n-1、np.full(shape,val)根据shape元组生成元素值都为val的数组、np.full_like(a,val)根据数组a的形状生成数组、np.linspace()
6. ndarray数组的维度变换和类型变换
方法 | 说明 |
---|---|
.reshape(shape) | 不改变数组元素,返回shape形状的数组,原数组不变 |
.resize(shape) | 与.reshape()功能一致,但修改原数组 |
.swapaxes(ax1,ax2) | 将数组n个维度中两个维度进行调换 |
.flatten() | 对数组进行降维,返回折叠后的一维数组,原数组不变 |
.astype(new_type) | 创建新的数组(原始数据的拷贝),即使两个类型一致 |
>>> a=np.ones((2,3),dtype=np.int32)
>>> print(a)
[[1 1 1]
[1 1 1]]
>>> a.reshape((6))
array([1, 1, 1, 1, 1, 1], dtype=int32)
>>> print(a)
[[1 1 1]
[1 1 1]]
>>> a.resize(6)
>>> print(a)
[1 1 1 1 1 1]
>>> a.astype(np.float)
array([ 1., 1., 1., 1., 1., 1.])
>>> print(a)
[1 1 1 1 1 1]
7. 数组的索引和切片
>>> b=np.array([9,8,7,6,5,4,3,2,1,0])
>>> b[2]
7
>>> b[0:6:2] #起始编号:终止编号(不含):步长
array([9, 7, 5])
>>> b=b.reshape(2,5)
>>> print(b)
[[9 8 7 6 5]
[4 3 2 1 0]]
>>> b[1,2] #一个维度一个索引值,逗号分隔,[]括起来
2
>>> b[1,:]
array([4, 3, 2, 1, 0]) #一个维度全选用:
>>> b[1,::2] #此时也可以结合步长使用
array([4, 2, 0])
8. 数组与标量之间的运算
数组与标量之间的运算作用于数组的每一个元素
>>> b.mean()
4.5
>>> b-b.mean()
array([[ 4.5, 3.5, 2.5, 1.5, 0.5],
[-0.5, -1.5, -2.5, -3.5, -4.5]])
9. NumPy一元/二元运算函数
对ndarray中的数据执行元素级运算的函数
一元函数
函数 | 说明 |
---|---|
np.abs(x) np.fabs(x) | 计算数组各元素的绝对值 |
np.sqrt(x) | 计算数组各元素的平方根 |
np.square(x) | 计算数组各元素的平方 |
np.log(x) np.log10(x) np.log2(x) | 计算数组各元素的自然对数、10底对数和2底对数 |
np.ceil(x) np.floor(x) | 计算数组各元素的ceiling值 或 floor值 |
np.rint(x) | 计算数组各元素的四舍五入值 |
np.modf(x) | 将数组各元素的小数和整数部分以两个独立数组形式返回 |
np.cos(x) np.cosh(x) np.sin(x) np.sinh(x) np.tan(x) np.tanh(x) | 计算数组各元素的普通型和双曲型三角函数 |
np.exp(x) | 计算数组各元素的指数值 |
np.sign(x) | 计算数组各元素的符号值,1(+), 0, ‐1(‐) |
二元函数
函数 | 说明 |
---|---|
+ ‐ * / ** | 两个数组各元素进行对应运算 |
np.maximum(x,y) np.fmax() np.minimum(x,y) np.fmin() | 元素级的最大值/最小值计算 |
np.mod(x,y) | 元素级的模运算 |
np.copysign(x,y) | 将数组y中各元素值的符号赋值给数组x对应元素 |
> < >= <= == != | 算术比较,产生布尔型数组 |
网友评论